Pagini recente » Cod sursa (job #1422695) | Cod sursa (job #2514349) | Cod sursa (job #1074801) | Cod sursa (job #1074810) | Cod sursa (job #423503)
Cod sursa(job #423503)
#include<stdio.h>
FILE *f,*g;
long i,n,m,x,y,z,c[50100],nr,t[4][250100],inf,dist[50100],pr,u,st[250100],p,fin[50100];
int main()
{ f=fopen("bellmanford.in","r"); g=fopen("bellmanford.out","w");
fscanf(f,"%ld%ld",&n,&m);
for(i=1;i<=m;i++)
{ fscanf(f,"%ld%ld%ld",&x,&y,&z);
if(c[x]==0) { nr++; c[x]=nr; t[1][nr]=y; t[3][nr]=z; fin[x]=nr; }
else { nr++; t[2][fin[x]]=nr; fin[x]=nr; t[1][nr]=y; t[3][nr]=z; }
}
inf=1000000000;
for(i=2;i<=n;i++) dist[i]=inf;
pr=u=1; st[1]=1;
while(pr<=u)
{ p=c[st[pr]];
while(p)
{ if(dist[st[pr]]+t[3][p]<dist[t[1][p]])
{ u++; st[u]=t[1][p]; dist[t[1][p]]=dist[st[pr]]+t[3][p]; }
p=t[2][p];
}
pr++;
}
for(i=2;i<=n;i++) fprintf(g,"%ld ",dist[i]);
fclose(g);
return 0;
}