Pagini recente » Cod sursa (job #2222159) | Cod sursa (job #2980342) | Cod sursa (job #2164053) | Cod sursa (job #3229827) | Cod sursa (job #236900)
Cod sursa(job #236900)
# include <stdio.h>
# include <stdlib.h>
# define nmax 50001
# define inf 500001
long x,y,m,n,i,j,min,ct;
int **A,D[nmax],p[nmax],S[nmax],ok,dr[nmax];
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%ld %ld",&n,&m);
A=(int**) calloc(n+1,sizeof(int *));
for (i=1;i<=n;i++){
A[i]=(int *) calloc(n+1,sizeof(int));
for (j=1;j<=i;j++)
A[i][j]=A[j][i]=inf;
}
for (i=1;i<=m;i++){
scanf("%ld %ld %ld",&x,&y,&ct);
A[x][y]=ct;
}
for (i=1;i<=n;i++){
D[i]=A[1][i];
if (D[i]!=inf) p[i]=1;
}
S[1]=1; p[1]=0;
for (j=1;j<n;j++) {
ok=0;min=inf;
for (i=1;i<=n;i++)
if (S[i]==0 && D[i]< min) {
min=D[i];
y=i; ok=1;
}
if (ok){
S[y]=1;
for (i=1;i<=n;i++)
if (S[i]==0 && D[i]>D[y]+A[y][i]){
D[i]=D[y]+A[y][i];
p[i]=y;
}
}
}
for (i=2;i<=n;i++)
if (D[i]!=inf) printf("%d ", D[i]);
else printf("0 ");
return 0;
}