Pagini recente » Cod sursa (job #830514) | Cod sursa (job #751856) | Istoria paginii utilizator/alvaro.regueira-vilar | Cod sursa (job #2591531) | Cod sursa (job #187130)
Cod sursa(job #187130)
#include<stdio.h>
#define INF 2000000000
long d[2000],fol[2000],sol[1000][1000],n,m,i,j,a,b,c;
void rezolva();
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%ld %ld",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
sol[i][j]=INF;
for (i=1;i<=m;i++)
scanf("%ld %ld %ld",&a,&b,&c),sol[a][b]=c,sol[b][c]=c;
rezolva();
for (i=2;i<=n;i++)
if (d[i]!=INF)
printf("%ld ",d[i]);
else
printf("%ld",0);
return 0;
}
void rezolva()
{long min,nod=1;
for (i=2;i<=n;i++)
d[i]=sol[1][i];
fol[1]=1;
c=1;
while(1)
{
min=INF;
for (i=1;i<=n;i++)
if (sol[c][i]<min && !fol[i])
{
min = sol[c][i];
nod =i;
}
fol[nod]=1;
c=nod;
if (min == INF)
break;
else
for (i=0;i<=n;i++)
if (d[i]> d[nod] + sol[nod][i] )
d[i] = d[nod] + sol[nod][i];
}
}