Pagini recente » Cod sursa (job #3192037) | Cod sursa (job #1023691) | Cod sursa (job #2987083) | Cod sursa (job #1128115) | Cod sursa (job #1145221)
#include<iostream>
#include<cstdio>
#define MAXIM 1000
#include<vector>
using namespace std;
vector<pair<int, int> > a[50000];
int main()
{
int i, j, prim, ultim, q[50000], viz[50000], d[50000], nr[50000], x, y, c, n, m;
FILE *fin, *fout;
fin=fopen("bellmanford.in", "r");
fout=fopen("bellmanford.out", "w");
fscanf(fin, "%d %d", &n, &m);
for(i=0; i<m; i++) {
fscanf(fin, "%d %d %d", &x, &y, &c);
a[x-1].push_back(make_pair(y-1, c));
}
for(i=0; i<n; i++) {
d[i]=MAXIM;
viz[i]=0;
nr[i]=0;
}
prim=ultim=0;
q[0]=0;
ultim++;
viz[0]=1;
d[0]=0;
int ok=1;
while(prim<=ultim && ok==1) {
for(i=0; i<a[q[prim]].size(); i++)
if(d[q[prim]]<MAXIM)
if(d[a[q[prim]][i].first] > d[q[prim]]+a[q[prim]][i].second) {
d[a[q[prim]][i].first] = d[q[prim]]+a[q[prim]][i].second;
if(viz[a[q[prim]][i].first]==0) {
if(nr[a[q[prim]][i].first]>n) {
ok=0;}
else {
q[ultim]=a[q[prim]][i].first;
viz[q[ultim]]=1;
nr[q[ultim]]++;
ultim++;
}
}
}
viz[q[prim]]=0;
prim++;
}
if(ok==0)
fprintf(fout, "Ciclu negativ!");
else
for(i=1; i<n; i++)
fprintf(fout, "%d ", d[i]);
}