Cod sursa(job #1817504)

Utilizator LizaSzabo Liza Liza Data 27 noiembrie 2016 22:27:11
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <fstream>
#include<queue>

using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int Nmax=100005, inf=1<<30;
int N,M,K=1,D[Nmax],inQ[Nmax],nrQ[Nmax];
vector < pair <int,int> > G[Nmax];
queue<int>Q;

void read()
{
    fin>>N>>M;
      for(int i=1;i<=M;i++)
    {
        int x,y,c;
        fin>>x>>y>>c;
        G[x].push_back(make_pair(y,c));
    }
}

void solve()
{
    for(int i=2; i<=N; ++i)
    {
        D[i]=inf;
    }
    D[1]=0;
    Q.push(1);
    inQ[1]=1;
    nrQ[1]++;
    while(!Q.empty()&&K)
    {
        int nod=Q.front();
        Q.pop();
        inQ[nod]=0;
        for(unsigned i=0; i<G[nod].size();++i)
        {
            int vecin=G[nod][i].first;
            int cost=G[nod][i].second;
            if(D[vecin]>D[nod]+cost){
                D[vecin]=D[nod]+cost;
                if(!inQ[vecin])
                {
                    Q.push(vecin);
                    inQ[vecin]=1;
                    nrQ[vecin]++;
                    if(nrQ[vecin]>N)

                K=0;
            }
            }
        }
    }

}
void print()
{
    if(K)
    {
        for(int i=2;i<=N;i++)
            fout<<D[i]<<" ";
        fout<<"\n";
    }
    else
    {
        fout<<"Ciclu negativ!\n";
    }
}
int main()
{
    read();
  solve();
    print();
    return 0;
}