Cod sursa(job #2112391)

Utilizator sabina.hutanuSabina Hutanu sabina.hutanu Data 23 ianuarie 2018 13:42:45
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50005
#define INF 1001

using namespace std;

ifstream fin ("bellmanford.in");
ofstream fout ("bellmanford.out");

void citire();
void bf();

struct graf
{
    int vf, c;
};

int dmin[NMAX], nr[NMAX], n, m, start;
vector<graf> L[NMAX];
queue<int> C;

int main()
{
    citire();
    bf();
    return 0;
}

void citire()
{
    graf aux;
    int i, x;
    start=1;
    fin>>n>>m;
    for(i=1; i<=m; i++)
    {
        fin>>x>>aux.vf>>aux.c;
        L[x].push_back(aux);
    }
    C.push(start);
    for(i=2; i<=n; i++)
        dmin[i]=INF;
}

void bf()
{
    bool ok;
    int i, y, x;
    while(!C.empty() && !ok)
    {
        x=C.front();
        C.pop();
        for(i=0; i<L[x].size(); i++)
        {
            y=L[x][i].vf;
            if (dmin[y]>dmin[x]+L[x][i].c)
            {
                dmin[y]=dmin[x]+L[x][i].c;
                nr[y]++;
                C.push(y);
                if(nr[y]==n)
                {
                    ok=1;
                    break;
                }
            }
        }
    }
    if(ok==1)
        fout<<"Ciclu negativ!"<<'\n';
    else
        for(i=2; i<=n; i++)
            fout<<dmin[i]<<' ';
}