Pagini recente » Cod sursa (job #104778) | Cod sursa (job #165350) | Cod sursa (job #1872795) | Cod sursa (job #970588) | Cod sursa (job #490254)
Cod sursa(job #490254)
#include <stdio.h>
#define inf 10000
int c[100][100],d[100],t[100],s[100],r,n,m;
FILE *f,*g;
void cit(){
int i,j,x,y;
f=fopen("dijkstra.in","r");
fscanf(f,"%d %d",&n,&m);
fscanf(f,"%d",&r);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (i!=j)
c[i][j]=inf;
for (i=1;i<=n;i++)
{
fscanf(f,"%d %d %d",&x,&y,&j);
c[x][y]=c[y][x]=j;
}
fclose(f);
}
void solve(){
int i,j,k,i0;
int min;
for (i=1;i<=n;i++)
{ d[i]=c[r][i];
t[i]=r;
s[i]=0;
}
t[r]=0;
d[r]=0;
s[r]=1;
for (k=1;k<=n-1;k++)
{
min=inf;
for (i=1;i<=n;i++)
if (s[i]==0&&d[i]<min)
{ i0=i; min=d[i]; }
s[i0]=1;
for (i=1;i<=n;i++)
if (min+c[i0][i]<d[i])
{ d[i]=min+c[i0][i];
t[i]=i0;
}
}
for (i=2;i<=n;i++)
fprintf(g,"%d ",d[i]);
fputc('\n',g);
}
/*void afis(int i){
if (t[i]==0)
{ fprintf(g,"%d ",i); return ;}
afis(t[i]);
fprintf(g,"%d ",i);
}*/
int main(){
cit();
g=fopen("dijkstra.out","w");
solve();
//afis(3);
fclose(g);
return 0;
}