Pagini recente » Cod sursa (job #255185) | Cod sursa (job #3279835) | Cod sursa (job #3215208) | Cod sursa (job #832677) | Cod sursa (job #306186)
Cod sursa(job #306186)
#include <stdio.h>
#include <stdlib.h>
#define VMAX 40050
#define EMAX 250000
#define INF 2000000000
int start[EMAX],target[EMAX],prev[EMAX],cost[EMAX],list[EMAX],last[VMAX],dist[VMAX];
char viz[VMAX];
int edgeNo,nodeNo,push,pop;
int main()
{
int i,x,y,c;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&nodeNo,&edgeNo);
for (i=1;i<=nodeNo;i++) last[i]=-1;
for (i=0;i<edgeNo;i++)
{
scanf("%d %d %d",&x,&y,&c);
start[i]=x;target[i]=y;prev[i]=last[x];last[x]=i;
cost[i]=c;
}
for (i=2;i<=nodeNo;i++) dist[i]=INF;
pop=1;push=1;
list[push]=1;viz[1]=0;
while (pop<=push)
{
x=list[pop];
for (i=last[x];i!=-1;i=prev[i])
if (dist[x]+cost[i]<dist[target[i]])
if (!viz[target[i]])
{
viz[target[i]]=1;
dist[target[i]]=dist[x]+cost[i];
list[++push]=target[i];
}
else
{
dist[target[i]]=dist[x]+cost[i];
}
viz[x]=0;
pop++;
}
for (i=2;i<=nodeNo;i++)
if (dist[i]==INF) printf("0 ");
else printf("%d ",dist[i]);
fclose(stdout);
return 0;
}