Pagini recente » Cod sursa (job #3161173) | Cod sursa (job #1807909) | Cod sursa (job #2200606) | Cod sursa (job #2181494) | Cod sursa (job #1450274)
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <deque>
#include <vector>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int MAX = 50001, inf = (1 << 30) - 1;
deque<int> q;
vector<pair<int, int>> v[MAX];
int m, n, a, b, c, vizq[MAX], viz[MAX], d[MAX];
void bellmanford(int source) {
for (int i = 1; i <= n; i++)
d[i] = inf;
d[source] = 0;
vizq[source] = 1;
viz[source] = 1;
q.push_back(source);
while (!q.empty()) {
int node = q.front();
q.pop_front();
for (auto it : v[node]) {
if (it.second + d[node] < d[it.first]) {
d[it.first] = it.second + d[node];
if(!vizq[it.first]) {
q.push_back(it.first);
viz[it.first]++;
if (viz[it.first] >= n) {
fout << "Ciclu negativ!";
exit(0);
}
vizq[it.first] = 1;
}
}
}
vizq[node] = 0;
}
}
int main() {
fin >> n >> m;
for (; m; m--) {
fin >> a >> b >> c;
v[a].push_back(make_pair(b, c));
}
bellmanford(1);
for (int i = 2; i <= n; i++)
fout << d[i] << ' ';
return 0;
}