Pagini recente » Cod sursa (job #2714208) | Cod sursa (job #1545041) | Cod sursa (job #391546) | Cod sursa (job #1933271) | Cod sursa (job #2801649)
#include <stdio.h>
#include <queue>
#include <vector>
#define MAX_N 50000
#define MAX_DIST 250000000
using namespace std;
struct node {
int nod, cost;
bool operator < (const node &aux) const {
return cost > aux.cost;
}
};
struct muchie {
int nod, cost;
};
int dist[MAX_N];;
vector <muchie> muchii[MAX_N];
priority_queue <node> pq;
int main() {
FILE *fin, *fout;
int n, m, x, y, next, c, i;
struct node crt;
fin = fopen( "bellmanford.in", "r" );
fscanf( fin, "%d%d", &n, &m );
for ( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d%d", &x, &y, &c );
x--;
y--;
muchii[x].push_back( { y, c } );
}
fclose( fin );
for ( i = 0; i < n; i++ )
dist[i] = MAX_DIST;
pq.push( { 0, 0 } );
while ( !pq.empty() ) {
crt = pq.top();
pq.pop();
dist[crt.nod] = crt.cost;
for ( i = 0; i < muchii[crt.nod].size(); i++ ) {
next = muchii[crt.nod][i].nod;
if ( dist[crt.nod] + muchii[crt.nod][i].cost < dist[next] ) {
dist[next] = dist[crt.nod] + muchii[crt.nod][i].cost;
pq.push( { next, dist[crt.nod] + muchii[crt.nod][i].cost } );
}
}
}
fout = fopen( "bellmanford.out", "w" );
for ( i = 1; i < n; i++ )
fprintf( fout, "%d ", dist[i] == -1 ? 0 : dist[i] );
fclose( fout );
return 0;
}