Pagini recente » Cod sursa (job #634638) | Cod sursa (job #2917150) | Cod sursa (job #2701530) | Cod sursa (job #1353429) | Cod sursa (job #656951)
Cod sursa(job #656951)
#include<cstdio>
#define inf 1002
#define max 5002
int a[max][max],d[max],s[max],n,m,xp;
void citire (){
int x,y;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
a[i][j]=inf;
a[i][i]=0;
}
int c;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&c);
a[x][y]=c;
}
}
void initd(){
s[xp]=1;
for(int i=1;i<=n;i++)
d[i]=a[xp][i];
}
int minim (){
int i,p,min;
min=inf;p=1;
for(i=1;i<=n;i++)
if(s[i]==0 && d[i]<min){
min=d[i];
p=i;
}
return p;
}
void dijkstra (){
int x,i,k;
x=0;
do{
x++;
k=minim();
s[k]=1;
for(i=1;i<=n;i++){
if(!s[i] &&d[i]>d[k]+a[k][i] && a[k][i]<inf && a[k][i]>0)
d[i]=d[k]+a[k][i];
}
}while(x!=n && d[k]!=inf);
}
void afisare(){
for(int i=1;i<=n;i++)
if(d[i]!=0 && d[i]!=inf)
printf("%d ",d[i]);
}
int main (){
xp=1;
citire();
initd();
dijkstra ();
afisare();
return 0;
}