Pagini recente » Cod sursa (job #291042) | Cod sursa (job #1539501) | Cod sursa (job #3287892) | Cod sursa (job #2704114) | Cod sursa (job #2427716)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#include <limits>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
const int oo = 1000000;
const size_t dim = 50001;
int n, m; //noduri, muchii
int d[dim]; //distantele
int check[dim];
vector<pair<int, int >>G[dim]; //graful
queue<int>q;
void citire() {
in >> n >> m;
for (int i = 0; i < m; i++) {
int nP, nF, cost;
in >> nP >> nF >> cost;
G[nP].push_back(make_pair(nF, cost));
}
}
int bf(int nod) {
for (int i = 1; i <= n; i++) {
d[i] = oo;
}
d[nod] = 0;
q.push(nod);
check[nod]++;
while (q.empty() == false) {
int u = q.front();
q.pop();
for (auto& k : G[u]) {
int vecin = k.first;
int cost = k.second;
if (d[vecin] > d[u] + cost) {
if (check[vecin] == n - 1) {
out << "Ciclu negativ!\n";
return 1;
}
d[vecin] = d[u] + cost;
check[vecin]++;
q.push(vecin);
}
}
}
return 0;
}
int main() {
citire();
if (bf(1) != -1) {
for (int i = 2; i <= n; i++) {
out << d[i] << " ";
}
}
return 0;
}