Pagini recente » Cod sursa (job #375362) | Cod sursa (job #3125103) | Cod sursa (job #705356) | Cod sursa (job #2930560) | Cod sursa (job #411703)
Cod sursa(job #411703)
#include <fstream.h>
#include <iostream.h>
int a[1001][1001],viz[1001],tata[1001],d[1001];
int n,i,j,min,k,x,c;
const int inf=32000;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
void citire (){
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j)
a[i][j] = inf;
while(f>>i>>j>>c)
a[i][j] = c;
}
void drum (int i){
if( tata[i] )
drum(tata[i]);
cout <<i<<" ";
}
void dijkstraa(){
for(i = 1;i <= n; i++){
d[i] = a[1][i];
if(d[i] != inf)
tata[i] = 1;
}
tata[1] = 0;
viz[1] = 1;
for(k = 1 ;k <n; k++){
min = inf;
for(i = 1;i <= n ;i++)
if(d[i] < min && ! viz[i]){
min = d[i];
j = i;
}
viz[j] = 1;
for(i = 1;i <= n;i++)
if(!viz[i] && d[i]>d[j] + a[j][i]){
d[i] = d[j] + a[j][i];
tata[i] = j;
}
}
for(i = 1; i <=n; i++){
if(i!=1)
if(d[i] != inf){
g<<d[i]<<" ";
}
}
}
int main(){
citire();
dijkstraa();
return 0;
}