Cod sursa(job #2856732)

Utilizator razvanalexrotaruRazvan Alexandru Rotaru razvanalexrotaru Data 24 februarie 2022 11:40:55
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<bits/stdc++.h>
#define cin fin
#define cout fout
#define Nmax 50008
#define oo 1<<30
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
int n,m,x;
int cmin[Nmax],nr[Nmax];
vector<pair <int,int> >G[Nmax];
queue<int> Coada;
void Citeste()
{
    int x,y,c;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>c;
        G[x].push_back(make_pair(y,c));
    }
}
bool Bellman(int nodStart)
{
    for(int i=1;i<=n;i++)
        cmin[i]=oo;
    cmin[nodStart]=0;
    Coada.push(nodStart);
    nr[nodStart]=1;
    while(!Coada.empty())
    {
        x=Coada.front();
        Coada.pop();
        ///parcurg lista de adiacenta a lui x
        for(auto i:G[x])
        {
            int vf=i.first;
            int cost=i.second;
            if(cmin[vf]>cmin[x]+cost)
            {
                cmin[vf]=cmin[x]+cost;
                Coada.push(vf);
                nr[vf]++;
                if(nr[vf]==n)
                    return 0;
            }
        }
    }
}
void Afiseaza()
{
    for(int i=2;i<=n;i++)
    {
        cout<<cmin[i]<<" ";
    }
}
int main()
{
    Citeste();
    Bellman(1);
    Afiseaza();
}