Pagini recente » Cod sursa (job #3286727) | Cod sursa (job #2948466) | oji2_sim | Cod sursa (job #2948569) | Cod sursa (job #1319796)
#include <stdio.h>
#include <stdlib.h>
#define INF 999999999
int c[5000][5000],n,m,d[50000],t[50000],minim,k,sel[50000];
void dij(int p)
{
int i,j;
int ok;
for(i=1;i<=n;i++)
{
t[i]=0;
d[i]=INF; sel[i]=0;
}
d[p]=0;
t[p]=0;
ok=1;
for(i=1; i<=n && ok; i++)
{
minim=INF;
for(j=1;j<=n;j++)
if(d[j] < minim && !sel[j])
{
minim = d[j];
k = j;
}
if(minim==INF)
ok=0;
else{
sel[k]=1;
for(j=1;j<=n;j++)
if(d[j]>d[k]+c[k][j]&& !sel[j])
{d[j]=d[k]+c[k][j];
t[j]=k;
}
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int i,j,x,y,z;
scanf("%d %d", &n, &m);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
c[i][j]=INF;
c[i][i]=0;
}
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&x,&y,&z);
c[x][y]=z;
}
dij(1);
for(i=2;i<=n;i++)
if (d[i]==INF)
d[i]=0;
for (i=2; i<=n; i++)
printf("%d ",d[i]);
return 0;
}