Cod sursa(job #1813205)

Utilizator MihaiPescaruMihai Pescaru MihaiPescaru Data 22 noiembrie 2016 19:54:02
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int m,start[50005],i,n,vmin,ok=1,j,k,coada[50002],pr,ul,nr,T[4][250005],c,x,y,d[50002],viz[50002],infinit=2000000000;
int main()
{
    fin>>n>>m;
    k=0;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        k++;
        T[0][k]=y;
        T[1][k]=c;
        T[2][k]=start[x];
        start[x]=k;

    }
    for(i=1;i<=n;i++)
    {
        viz[i]=0;
        d[i]=infinit;
    }
    d[1]=0;
    coada[1]=1;
    pr=1;
    ul=1;
    nr=1;
    viz[1]=1;

    while(nr!=0 && ok==1)
    {
        x=coada[pr];
        for(i=start[x];i!=0;i=T[2][i])
        {
            y=T[0][i];
            T[3][i]++;
            c=T[1][i];
            if(T[3][i]==n)
                ok=0;
            if(d[x]+c<d[y])
            {
                d[y]=d[x]+c;
                if(viz[y]==0)
                {
                    ul++;
                    if(ul>n)
                        ul=1;
                    coada[ul]=y;
                    nr++;
                    viz[y]=1;
                }
            }
        }
        pr++;
        if(pr>n)
        {
            pr=1;
        }
        nr--;
        viz[x]=0;
    }
    if(!ok)
        fout<<"Ciclu negativ!";
    else
    for(i=2;i<=n;i++)
    {
        if(d[i]==infinit)
            fout<<"0 ";
        else
            fout<<d[i]<<" ";
    }
    return 0;
}