Cod sursa(job #2179732)

Utilizator silvereaLKovacs Istvan silvereaL Data 20 martie 2018 13:40:08
Problema Algoritmul Bellman-Ford Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#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!";
}