Pagini recente » PreOJI 2017 | Cod sursa (job #3214897) | Cod sursa (job #511245) | Inundatie | Cod sursa (job #2170340)
#include <iostream>
#include <fstream>
#define Inf 999999
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, x, y, cst, x0, p,vfmin, dmin, d[102], c[102][102], pre[102], m[102];
void initializare()
{
f >> n >> p;
for ( int i=1; i<=n; i++ )
for ( int j=i+1; j<=n; j++ )
c[i][j] = c[j][i] = Inf;
while ( !f.eof() )
{
f >> x >> y >> cst;
c[x][y] = cst;
}
for ( int i=1; i<=n; i++ )
{
d[i] = c[1][i];
pre[i] = 1;
}
m[1] = 1;
pre[1] = 0;
}
void rezolvare()
{
for ( int j=1; j<n; j++ )
{
dmin = Inf;
for ( int i=1; i<=n; i++ )
{
if ( m[i] == 0 && d[i] < dmin )
{
dmin = d[i];
vfmin = i;
}
}
m[vfmin] = 1;
for ( int i=1; i<=n; i++ )
if ( m[i] == 0 && d[i] > d[vfmin] + c[vfmin][i] )
{
d[i] = d[vfmin] + c[vfmin][i];
pre[i] = vfmin;
}
}
}
void afisare()
{
for ( int i=2; i<=n; i++ )
if ( d[i] != Inf )
g << d[i] << " ";
else g << "-1 ";
}
int main()
{
initializare();
rezolvare();
afisare();
}