Pagini recente » Cod sursa (job #711601) | Cod sursa (job #978680) | Istoria paginii runda/biro_daily_quest_no.1/clasament | Cod sursa (job #1563123) | Cod sursa (job #159669)
Cod sursa(job #159669)
#include <stdio.h>
struct nod{
nod *urm;
long cost,nd;
} *p[1000],*aux,*auxx;
long d[1000],n,m,i,x,y,c,s[1000],k,min,j,gasit,poz;
int main()
{ freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;i++) d[i]=-1;
for(i=1;i<=m;i++){
scanf("%ld%ld%ld",&x,&y,&c);
aux=new nod;
aux->urm=p[x];
aux->nd=y,aux->cost=c;
p[x]=aux;
if (x==1) d[y]=c;
}
s[1]=1;
for(i=2;i<=n;i++){
k=1;
while(s[++k] && k<n && d[k]>=0);
poz=k;
for(j=k;j<=n;j++) if (d[j]<d[poz] && !s[j] && d[j]>=0) poz=j;
s[poz]=1;
for(aux=p[poz];aux!=NULL;aux=aux->urm)
if(!s[aux->nd])
{ if (d[aux->nd]==-1) d[aux->nd]=d[poz]+aux->cost;
else if (d[aux->nd]>d[poz]+aux->cost)
d[aux->nd]=d[poz]+aux->cost;
}
}
for(i=2;i<=n;i++)
if (d[i]==-1) printf("0 ");
else printf("%ld ",d[i]);
return 0;
}