Pagini recente » Cod sursa (job #1467109) | Cod sursa (job #1213958) | Cod sursa (job #563360) | Cod sursa (job #1695334) | Cod sursa (job #199279)
Cod sursa(job #199279)
#include<stdio.h>
#include<limits.h>
#define INF INT_MAX/2
#define NMAX 1000
#define MMAX 250000
/*
#define NMAX 10
#define MMAX 250
*/
struct arc{unsigned short a,b,c;};
int main(){
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int i,j,k,x,y,nrsel,gata;
int n,m;
int c[NMAX+1][NMAX+1],min;
unsigned short s[NMAX+1],prec[NMAX+1],start=1;
int d[NMAX+1];
arc va[MMAX];
scanf("%d%d",&n,&m);
for(i=0;i<m;++i) scanf("%hu%hu%hu",&va[i].a,&va[i].b,&va[i].c);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j) c[i][j]=INF;
for(i=1;i<=n;++i) c[i][i]=0;
for(i=0;i<m;++i){
x=va[i].a;y=va[i].b;
c[x][y]=va[i].c;
}
for(i=2;i<=n;++i){
d[i]=c[start][i];
s[i]=0;
if(d[i]<INF) prec[i]=start;
else prec[i]=0;
}
s[1]=1;prec[1]=0;
nrsel=1;gata=0;
do{
min=INF*2;
for(i=2;i<=n;++i)
if(!s[i]&&d[i]<min){
min=d[i];
k=i;
}
nrsel++;
if(d[k]==INF||nrsel==n-1) gata=1;
else{
s[k]=1;
for(j=2;j<=n;++j)
if(!s[j]&&d[j]>d[k]+c[k][j]){
d[j]=d[k]+c[k][j];
prec[j]=k;
}
}
}while(!gata);
for(i=2;i<=n;++i)
if(d[i]==INF) printf("0 ");
else printf("%d ",d[i]);
return 0;
}