Cod sursa(job #2505660)

Utilizator SoranaAureliaCatrina Sorana SoranaAurelia Data 7 decembrie 2019 10:11:17
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;

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

const int NMAX=50005;
struct dr{
    int y;
    int cost;
};

int n, m, x, y, c;
vector<dr>graph[NMAX];
int dmin[NMAX];
int viz[NMAX];
int decateori[NMAX];
queue <int> Q;

void formare(){
    for(int i=2; i<=n; i++)
        dmin[i]=INT_MAX;
}
void parcurgere(){
    Q.push(1);
    viz[1]=1;
    while(!Q.empty()){
        int x=Q.front();
        for(auto &v:graph[x]){
            if(dmin[v.y] > dmin[x]+v.cost){
                dmin[v.y]=dmin[x]+v.cost;
                if(viz[v.y]==0)
                    Q.push(v.y);
                viz[v.y]=1;
                decateori[v.y]++;
                if(decateori[v.y]>n){
                    g<<"Ciclu negativ!";
                    break;
                }

            }
        }
        viz[x]=0;
        Q.pop();
    }

}
int main()
{
    f>>n>>m;
    for(int i=1; i<m; i++){
        f>>x>>y>>c;
        graph[x].push_back({y, c});
    }
    formare();
    parcurgere();
    for(int i=2; i<=n; i++)
        g<<dmin[i]<<" ";
    return 0;
}