Pagini recente » Cod sursa (job #846134) | Cod sursa (job #1698594) | Cod sursa (job #643718) | Cod sursa (job #1355462) | Cod sursa (job #2097967)
#include <bits/stdc++.h>
#define inf 20005
#define maxn 50000
using namespace std;
vector <int> v[maxn]; /// vecini
vector <int> len[maxn]; /// lungime muchie
int cost[maxn]; /// cost minim
bool viz[maxn]; /// nod vizitat
bool found; /// am gasit un nod de vizitat
void visit ( int x )
{
viz[x] = true;
int nv = v[x].size ();
for ( int j = 0; j < nv; j++ )
{
if ( cost[x] + len[x][j] < cost[ v[x][j] ] )
cost[ v[x][j] ] = cost[x] + len[x][j];
}
}
int find_node_to_visit ( int n )
{
int _m = inf, p = -1;
found = false;
for ( int i = 0; i < n; i++ )
if ( viz[i] == false && cost[i] < _m )
{
found = true;
_m = cost[i];
p = i;
}
return p;
}
int main ()
{
ifstream fin ( "dijkstra.in" );
ofstream fout ( "dijkstra.out" );
int n, m;
fin >> n >> m; /// noduri, arce
int i, a, b, l;
for ( i = 0; i < m; i++ )
{
fin >> a >> b >> l;
a--;
b--;
v[a].push_back ( b );
len[a].push_back ( l );
}
for ( i = 1; i < n; i++ )
cost[i] = inf;
int x = find_node_to_visit( n );
while ( found == true )
{
visit ( x );
x = find_node_to_visit ( n );
}
for ( i = 1; i < n; i++ )
if ( cost[i] < inf )
fout << cost[i] << ' ';
else
fout << "0 ";
fin.close ();
fout.close ();
return 0;
}