Pagini recente » Rezultatele filtrării | Cod sursa (job #2452958) | Cod sursa (job #1242835) | Cod sursa (job #2768299) | Cod sursa (job #1908575)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define oo 999999999
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
vector < vector < pair <int, int> > > v;
vector <int> d;
queue <int> q;
bool viz[50001];
int a[50001];
int n, m, k;
int main()
{
fin>>n>>m;
int x, y, z;
d.resize(n + 1, oo);
v.resize(n + 1);
for (int i = 1; i <= m; i++) {
fin>>x>>y>>z;
v[x].push_back(make_pair(y, z));
}
int R = 1;
d[R] = 0;
q.push(R);
while (!q.empty()) {
k = q.front();
q.pop();
viz[k] = false;
for (int i = 0; i < v[k].size(); i++) {
y = v[k][i].first;
if(d[y] > v[k][i].second + d[k]) {
d[y] = v[k][i].second + d[k];
if (viz[v[k][i].first] == false) {
viz[v[k][i].first] = true;
q.push(y);
a[y]++;
if(a[y]>n) {
fout<<"Ciclu negativ!";
return 0;
}
}
}
}
}
for (int i = 2; i <= n; i++) {
fout<<d[i]<<' ';
}
fin.close();
fout.close();
return 0;
}