Cod sursa(job #2712168)

Utilizator balintfranceskaBalint Franceska balintfranceska Data 25 februarie 2021 11:56:35
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
#define Nmax 50006
#define INF 1000000000
using namespace std;
ifstream f("bellmanford.in"); ofstream g("bellmanford.out");
int D[Nmax], use[Nmax];
struct vecin {int varf, cost;};
vector <vecin> L[Nmax];
queue <int> Q;
int main()
{   int n, m; f>>n>>m;
    for(int x, y, c; m; --m) {f>>x>>y>>c; L[x].push_back((vecin){y, c});}
    for(int i=1; i<=n; ++i) D[i]=INF;
    Q.push(1); D[1]=0;
    while(!Q.empty())
    {   int x=Q.front(); Q.pop(); use[x]++;
        if(use[x]==n) {g<<"Ciclu negativ!\n"; g.close(); f.close(); return 0;}
        vector <vecin> :: iterator it=L[x].begin(), sf=L[x].end();
        for(; it!=sf; ++it)
            if(D[(*it).varf]>D[x]+(*it).cost)
            {   D[(*it).varf]=D[x]+(*it).cost;
                Q.push((*it).varf);
            }
    }
    for(int i=2; i<=n; ++i) g<<D[i]<<' ';
    g<<'\n'; f.close(); g.close(); return 0;
}