Pagini recente » Cod sursa (job #858008) | Cod sursa (job #2048168) | Cod sursa (job #624877) | Cod sursa (job #2919288) | Cod sursa (job #256005)
Cod sursa(job #256005)
# include <stdio.h>
# include <stdlib.h>
# define nmax 50001
# define inf 2000000000
struct nod{
int v,c;
nod * ad;
} *G[nmax];
long D[nmax],C[4*nmax];
int N,M;
char viz[nmax];
int main()
{
int i,x,y,c;
long p,u;
nod *q;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%ld %ld",&N,&M);
for (i=1;i<=M;++i){
scanf("%d %d %d",&x,&y,&c);
q=new nod;
q->v=y; q->c=c;
q->ad=G[x]; G[x]=q;
}
for (i=2;i<=N;++i)
D[i]=inf;
p=u=C[1]=viz[1]=1;
while (p<=u){
q=G[C[p]];
while(q!=NULL){
if (q->c+D[C[p]]<D[q->v]){
D[q->v]=q->c+D[C[p]];
if (viz[q->v]==0) {
++u; C[u]=q->v;
viz[q->v]=1;
}
}
q=q->ad;
}
viz[C[p]]=0;
++p;
}
for (i=2;i<=N;++i)
if (D[i]!=inf) printf("%ld ",D[i]);
else printf("0 ");
return 0;
}