Pagini recente » Cod sursa (job #2014262) | Cod sursa (job #2247708) | Cod sursa (job #401039) | Cod sursa (job #3254920) | Cod sursa (job #1386976)
#include <fstream>
#include <vector>
#include <limits.h>
using namespace std;
#define FILEIN "bellmanford.in"
#define FILEOUT "bellmanford.out"
const int MAXN = 50005;
struct edge {
int src, dest;
short weight;
edge() {}
};
int N, M;
vector<edge> G;
int dist[MAXN];
void ReadData() {
ifstream fin(FILEIN);
fin >> N >> M;
G.resize(M);
for (int i = 0; i < N; i++) {
int x, y, c;
fin >> x >> y >> c;
G[i].src = x;
G[i].dest = y;
G[i].weight = c;
}
fin.close();
}
int Solve() {
for (int i = 2; i <= N; i++)
dist[i] = INT_MAX;
dist[1] = 0;
for (int i = 1; i <= N - 1; i++) {
for (edge e : G) {
int u = e.src;
int v = e.dest;
int weight = e.weight;
if (dist[u] != INT_MAX && dist[v] > dist[u] + weight) {
dist[v] = dist[u] + weight;
}
}
}
for (edge e : G) {
int u = e.src;
int v = e.dest;
int weight = e.weight;
if (dist[u] != INT_MAX && dist[v] > dist[u] + weight) {
return 0;
}
}
return 1;
}
void WriteData(int q) {
ofstream fout(FILEOUT);
if (q)
for (int i = 2; i <= N; i++)
fout << (dist[i] != INT_MAX ? dist[i] : 0) << ' ';
else
fout << "Ciclu negativ!";
fout.close();
}
int main()
{
ReadData();
WriteData(Solve());
return 0;
}