Pagini recente » Cod sursa (job #538187) | Cod sursa (job #12317) | Cod sursa (job #1861613) | Cod sursa (job #298496) | Cod sursa (job #2083637)
#include <iostream>
#include <vector>
#include <queue>
#define MAX_N 50000
const int INF = 0x7fffffff;
using namespace std ;
struct Muchie {
int v; // vecin
int cost;
};
vector<struct Muchie> muchii[1 + MAX_N];
int dist[1 + MAX_N];
bool inCoada[1 + MAX_N];
void bellmanFord(int s, int n) {
queue<int> q;
for(int u = 1; u <= n; u++)
dist[u] = INF;
q.push(s);
inCoada[s] = true;
dist[s] = 0;
while (!q.empty()) {
int u = q.front();
q.pop();
inCoada[u] = false;
for (Muchie e : muchii[u]) {
if (dist[e.v] > dist[u] + e.cost) {
dist[e.v] = dist[u] + e.cost;
if (!inCoada[e.v]) {
inCoada[e.v] = true;
q.push(e.v);
}
}
}
}
}
int main() {
FILE *fin, *fout ;
fin = fopen ("bellmanford.in", "r" ) ;
fout = fopen ("bellmanford.out", "w" ) ;
int n, m, i, nod ;
Muchie elem ;
fscanf (fin, "%d%d", &n, &m ) ;
for (i = 0 ; i < m ; i++ ) {
fscanf (fin, "%d%d%d", &nod, &elem.v, &elem.cost ) ;
muchii[nod].push_back (elem) ;
}
bellmanFord(1, n);
for (i = 2 ; i<= n ; i++ )
fprintf (fout, "%d ", dist[i] ) ;
return 0;
}