Pagini recente » Cod sursa (job #1162900) | Cod sursa (job #2818202) | Cod sursa (job #1451770) | Cod sursa (job #2600904) | Cod sursa (job #1415193)
#include <iostream>
#include <fstream>
#include <climits>
#include <algorithm>
using namespace std;
int a[101][101],n,vf,v[101],nmin;
int d[101][101];
int Pivot(int f)
{
int pivot=0;
nmin=INT_MAX;
for(int j=1;j<=n;j++)
if((v[j]==0) && (d[f][j]<nmin))
{
nmin=d[f][j];
pivot=j;
}
v[pivot]=d[f][0]; //modificat
return pivot;
}
int main()
{
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
in >> n >> vf;
fill(&a[0][0],&a[n][n]+1,0);
for(register int i=1;i<=n;i++)
for(register int j=1;j<=n;j++ )
if(i!=j) a[i][j]=INT_MAX;
else a[i][j]=0;
int x,y,z;
while(in>>x>>y>>z) a[x][y]=z;
d[0][0]=vf;
//cout << vf << endl;
fill(v,v+n+1,0);
v[vf]=vf;
copy(&a[vf][1],&a[vf][n]+1,&d[0][1]); //modificat
/*for(int i=1;i<=n;i++) cout << a[vf][i] << ' ';
cout << endl;
for(int i=1;i<=n;i++) cout << d[0][i] << ' ';*/
// d[0][vf]=0;
int i=0,pivot=vf;
while(pivot)
{
pivot=Pivot(i);
// for(int j=1;j<=n;j++) cout << d[i-1][j] << ' ';cout << endl;cout<<pivot << endl;
i++;
d[i][0]=pivot;
for(int j=1;j<=n;j++)
if(a[d[i][0]][j]!=INT_MAX)
{
if((nmin+a[d[i][0]][j])<d[i-1][j]) d[i][j]=nmin+a[d[i][0]][j]; //modificat
else d[i][j]=d[i-1][j];
} else d[i][j]=d[i-1][j];
//for(int j=0;j<=n;j++) cout << d[i][j] << ' ';cout << endl;
}
/* cout << endl;
for(int j=1;j<=n;j++) cout << v[j] << ' ';
int k;
cout << endl;
cin >> k;
int m[100],g=0;
while(k!=v[k])
{
m[g]=k;k=v[k];g++;
}
m[g]=k;
for(int i=g;i>=0;i--) cout << m[i] << ' ';
*/
for(int j=1;j<=n;j++)
if(d[i-1][j]==INT_MAX) out << -1 << ' ';
else out << d[i-1][j] << ' ';
return 0;
}