Pagini recente » Cod sursa (job #1303233) | Cod sursa (job #2403012) | Cod sursa (job #430221) | Cod sursa (job #2750887) | Cod sursa (job #2179732)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
const int M = 100005;
const int N = 50001;
ifstream fcin("bellmanford.in");
ofstream fcout("bellmanford.out");
struct edge
{
int s, d, c;
};
struct graph
{
int n, m;
edge x[M];
} g;
int D[M], menet, inf;
bool vege;
bool bellmanFord()
{
for (int i = 2; i <= g.n; ++i)
D[i] = inf;
D[1] = 0;
for (; menet < g.n && !vege; ++menet)
{
vege = true;
for (int i = 0; i < g.m; ++i)
if (g.x[i].c + D[g.x[i].s] < D[g.x[i].d])
{
D[g.x[i].d] = g.x[i].c + D[g.x[i].s];
vege = false;
}
}
if (menet >= g.n)
return false;
return true;
}
int main()
{
fcin >> g.n >> g.m;
for (int i = 0; i < g.m; ++i)
{
fcin >> g.x[i].s >> g.x[i].d >> g.x[i].c;
inf += abs(g.x[i].c);
}
inf++;
if (bellmanFord())
for (int i = 2; i <= g.n; ++i)
fcout << D[i] << ' ';
else
fcout << "Ciclu negativ!";
}