Pagini recente » Cod sursa (job #2190955) | Cod sursa (job #265040) | Cod sursa (job #708554) | Cod sursa (job #1998703) | Cod sursa (job #2280014)
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef long double ld;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int INF = 1e9;
struct var {
int a, b, cost;
};
vector < int > dist;
vector < var > edges;
bool cycle = false;
void BellmanFord(int startNode, int n, int m) {
dist[startNode] = 0;
for (int i = 0; i < n && !cycle; ++i) {
for (int j = 0; j < m && !cycle; ++j) {
if (dist[edges[j].a] + edges[j].cost < dist[edges[j].b]) {
dist[edges[j].b] = dist[edges[j].a] + edges[j].cost;
if (i == n - 1) {
cycle = true;
}
}
}
}
}
int main() {
int n, m; fin >> n >> m;
edges.resize(m);
for (int i = 0; i < m; ++i) {
fin >> edges[i].a >> edges[i].b >> edges[i].cost;
--edges[i].a; --edges[i].b;
}
dist.resize(n, INF);
BellmanFord(0, n, m);
if (cycle == false) {
for (int i = 1; i < n; ++i) {
fout << dist[i] << " ";
}
} else {
fout << "Ciclu negativ!";
}
return 0;
}