Pagini recente » Cod sursa (job #18676) | Cod sursa (job #2922125) | Cod sursa (job #38663) | Cod sursa (job #3216319) | Cod sursa (job #724442)
Cod sursa(job #724442)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 50005
#define inf 10000
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int n, m, d[nmax], viz[nmax], minim;
vector< pair<int,int> > v[nmax];
void citeste()
{ int x, y, c;
in>>n>>m;
for (int i=1; i<=m; ++i)
{
in>>x>>y>>c;
v[x].push_back(make_pair(y,c));
v[y].push_back(make_pair(x,c));
}
}
void dijkstra(int nod)
{ int k, gasit = 1;
viz[nod] = 1;
for ( unsigned i = 0; i < v[nod].size(); ++i )
d[ v[nod][i].first ] = v[nod][i].second;
while ( gasit )
{
minim = inf;
for (int i=1; i<=n; ++i)
if ( !viz[i] && minim > d[i] )
{
minim = d[i];
k = i;
}
if ( minim != inf )
{
viz[k] = 1;
for (unsigned i = 0; i < v[k].size(); ++i)
if ( !viz[ v[k][i].first ] )
d[ v[k][i].first ] = min( d[ v[k][i].first ], d[k] + v[k][i].second );
}
else gasit = 0;
}
}
int main()
{
citeste();
for (int i=1; i<=n; ++i)
d[i] = inf;
dijkstra(1);
for (int i=2; i<=n; ++i)
out<<d[i]<<" ";
return 0;
}