Cod sursa(job #1854786)

Utilizator dianamichesaRosu Diana Michesa dianamichesa Data 23 ianuarie 2017 11:29:19
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bellmanford.in");
ofstream go("bellmanford.out");
struct edge{
int next,c;};
vector <edge> g[50000];
queue <int> q;
vector <edge> ::iterator it;
int best[50000],in[50000],n,m;
int inf=1001;
int main()
{
    f>>n>>m;
    edge p;
    int x,y,cost;
    for(int i=1;i<=m;i++){
            f>>x>>y>>cost;
            p.next=y;
            p.c=cost;
            g[x].push_back(p);
            p.next=x;
            g[y].push_back(p);
    }
    for(int i=1;i<=n;i++)
        best[i]=inf;
    best[1]=0;
    q.push(1);
    int flag=1;
    while(!q.empty()){
            int node=q.front();
            in[node]++;
            q.pop();
            for(auto &it: g[node]){
                    if(best[it.next]==inf){
                            if(best[it.next]>=best[node]+it.c){
                            best[it.next]=best[node]+it.c;
                            /*if(in[it.next])*/ q.push(it.next);}
                    }
            if(in[node]>n+10) flag=0;
            }
    }
    if(flag==0) go<<"Ciclu negativ!";
    else for(int i=2;i<=n;i++) go<<best[i]<<' ';
    return 0;
}