Pagini recente » Cod sursa (job #2339092) | Cod sursa (job #1627886) | Cod sursa (job #3178732) | Cod sursa (job #1887529) | Cod sursa (job #2200252)
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 50000
#define INF ( NMAX - 1 ) * 20000
using namespace std;
typedef pair<int, int> ii;
vector < ii > G[NMAX + 1];
int dist[NMAX + 1];
bool solved[NMAX + 1];
priority_queue < ii, vector<ii>, greater<ii> > coada;
int main() {
int n, m, i, j, y, cost, varf;
FILE *fin, *fout;
fin = fopen( "dijkstra.in", "r" );
fout = fopen( "dijkstra.out", "w" ) ;
fscanf( fin, "%d%d", &n, &m );
while ( m-- ) {
fscanf( fin, "%d%d%d", &i, &j, &cost );
G[i].push_back( make_pair( j, cost ) );
}
int start = 1;
for ( i = 1; i <= n; i++ )
dist[i] = INF;
coada.push( ii( 0, start ) );
dist[start] = 0;
while ( !coada.empty() ) {
varf = coada.top().second;
coada.pop();
if ( solved[varf] == false ) {
solved[varf] = true;
for ( j = 0; j < G[varf].size(); j++ ) {
y = G[varf][j].first;
cost = G[varf][j].second;
if ( dist[y] > dist[varf] + cost ) {
dist[y] = dist[varf] + cost;
coada.push( ii( dist[y], y ) );
}
}
}
}
for ( i = 1; i <= n; i++ )
if ( i != start ) {
if ( dist[i] == INF )
dist[i] = 0;
fprintf( fout, "%d ", dist[i] );
}
fputc( '\n', fout );
fclose( fin );
fclose( fout );
return 0;
}