Cod sursa(job #2574291)

Utilizator spartanul300Vasile Andrei spartanul300 Data 5 martie 2020 21:23:27
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("bellmanford.in");
ofstream g("bellmanford.out");

vector <pair <int,int> > v[50100];
queue <int> q;
int n,dist[50100],fv[50100];

void Bellman_Ford(int nod)
{
    int i;

    for(i=1;i<=n;i++)dist[i]=INT_MAX/2,fv[i]=0;
    fv[1]=1;q.push(1);dist[1]=0;
    while(!q.empty())
    {
        nod=q.front();
        q.pop();

        if(fv[nod]>=n)
        {
            g<<"Ciclu negativ!";
            exit(0);
        }

        for(int i=0;i<v[nod].size();i++)
        {
            int vecin=v[nod][i].first;
            int cost_intre=v[nod][i].second;
            if(dist[vecin] > dist[nod]+cost_intre)
            {
                dist[vecin]=dist[nod]+cost_intre;
                fv[vecin]++;
                q.push(vecin);
            }
        }
    }
}

int m,i,x,cost,y;
int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>cost;
        v[x].push_back({y,cost});
    }

    Bellman_Ford(1);
    for(i=2;i<=n;i++)g<<dist[i]<<" ";
    return 0;
}