Pagini recente » Cod sursa (job #2532460) | Cod sursa (job #2381607) | Cod sursa (job #1676842) | Cod sursa (job #3260195) | Cod sursa (job #2200237)
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 50000
#define INF ( NMAX - 1 ) * 20000
using namespace std;
vector < pair<int, int> > G[NMAX + 1];
int dist[NMAX + 1];
bool solved[NMAX + 1];
struct cmp {
bool operator()( const int &a, const int &b ) {
return dist[a] > dist[b];
}
};
priority_queue < int, vector<int>, cmp > 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++ )
if ( i != start )
dist[i] = INF;
coada.push( start );
while ( !coada.empty() ) {
varf = coada.top();
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( 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;
}