Cod sursa(job #2112402)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 23 ianuarie 2018 13:49:34
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <vector>
#include <queue>
#define INF 1000000000
#define nmax 50005
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
struct data{
    int vec,c;
};
queue <int> q;
vector <data> v[nmax];
int dist[nmax],in[nmax],ap[nmax];
int main()
{
    int n,m,i,x,nod,vec,cost;
    data z;
    f>>n>>m;
    for(i=2;i<=n;i++)
        dist[i]=INF;
    for(i=1;i<=m;i++)
    {
        f>>x>>z.vec>>z.c;
        v[x].push_back(z);
    }
    in[1]=1;
    ap[1]=1;
    q.push(1);
    while(!q.empty())
    {
        nod=q.front();
        in[nod]=0;
        q.pop();
        for(i=0;i<v[nod].size();i++)
        {
            vec=v[nod][i].vec;
            cost=v[nod][i].c;
            if(dist[nod]+cost<dist[vec])
            {
                dist[vec]=dist[nod]+cost;
                ap[vec]++;
                if(ap[vec]>=n)
                {
                    g<<"Ciclu negativ!"<<'\n';
                    return 0;
                }
                if(in[vec]==0)
                {
                    in[vec]=1;
                    q.push(vec);
                }
            }
        }
    }
    for(i=2;i<=n;i++)
    {
        g<<dist[i]<<' ';
    }
    return 0;
}