Pagini recente » Cod sursa (job #1190618) | Cod sursa (job #2077402) | Cod sursa (job #1497859) | Cod sursa (job #2236358) | Cod sursa (job #695430)
Cod sursa(job #695430)
#include<fstream.h>
#include<iostream.h>
int const inf=2000;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,start,a[100][100],s[100],t[100],c[100],i,j,m,o,p,q;
void citire()
{f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ if(i!=j) a[i][j]=2000;
else a[i][j]=0; }
for(i=1;i<=m;i++)
{ f>>o>>p>>q; // A B C lungimea de la A la B e C
a[o][p]=q; a[p][o]=q;}
start=1;
}
void dijkstra(int x)
{ int i,min,ok,k;
for(i=1;i<=n;i++) { c[i]=a[x][i]; t[i]=x; s[i]=0; }
t[x]=0;
s[x]=1;
ok=1;
for(j=1;j<=n-1;j++) { min=inf;
for(i=1;i<=n;i++) if(s[i]==0 && c[i]<min){ min=c[i]; k=i; }
s[k]=1;
for(i=1;i<=n;i++) if(s[i]==0 && c[i]>c[k]+a[k][i]) { c[i]=c[k]+a[k][i]; t[i]=k; }
}
}
void afis(int x)
{ for(i=1;i<=n;i++)
if(i!=x) if(t[i]!=0) g<<c[i]<<" ";
else g<<0<<" "; }
int main()
{ citire();
dijkstra(start);
afis(start);
f.close();
g.close();
return 0;
}