Pagini recente » Cod sursa (job #798334) | Cod sursa (job #1849483) | Cod sursa (job #2600592) | Cod sursa (job #2441456) | Cod sursa (job #2883741)
#include <fstream>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
struct graf {
int vec;
int c;
};
vector <graf> G[500001];
queue <int> q;
int n, m;
int viz[50001], d[50001], inqueue[50001];
bool bellmanford(int vf) {
for (int i = 1; i <= n; i++) {
viz[i] = 0;
d[i] = INF;
inqueue[i] = 0;
}
q.push(vf);
inqueue[vf] = 1;
d[vf] = 0;
int x;
while (!q.empty()) {
x = q.front();
viz[x]++;
if (viz[x] >= n)
return false;
q.pop();
inqueue[x] = 0;
int nrvec = G[x].size();
for (int i = 0; i < nrvec; i++) {
int vecin = G[x][i].vec;
int dd = G[x][i].c;
if (d[x] + dd < d[vecin]) {
d[vecin] = d[x] + dd;
if (!inqueue[vecin])
q.push(vecin);
}
}
}
return true;
}
int main()
{
int x, y, cost;
in >> n >> m;
for (int i = 1; i <= m; i++) {
in >> x >> y >> cost;
graf g;
g.vec = y;
g.c = cost;
G[x].push_back(g);
}
if (bellmanford(1))
for (int i = 2; i <= n; i++)
out << d[i] << " ";
else
out << "Ciclu negativ!";
return 0;
}