Cod sursa(job #1119797)

Utilizator RadEmanuelRad Emanuel RadEmanuel Data 24 februarie 2014 20:06:07
Problema Algoritmul Bellman-Ford Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<fstream>
#include<vector>
#include<list>
#define maxint 2147000000
#define dmax 50001
using namespace std;

ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct nod {int cost,nr;}q;
list<nod> lista;
list<nod>::iterator it;
vector< list<nod> >l(dmax,lista);
int i,n,m,x,y,c,d[dmax],app[dmax],viz[dmax],coada[10*dmax];

int bf()
{
    int ls=0,ld=0;
    coada[0]=1;
    for(i=2;i<=n;++i)
        d[i]=maxint;
    while(ls<=ld)
    {
        x=coada[ls];
        viz[x]=0;
        for(it=l[x].begin();it!=l[x].end();++it)
        {
            y=it->nr;
            c=it->cost;
            if(d[y]>d[x]+c)
            {
                d[y]=d[x]+c;
                if(!viz[y])
                {
                    if(app[y]>n)
                        return 1;
                    ++app[y];
                    coada[++ld]=y;
                    viz[y]=1;
                }
            }
        }
        ++ls;
    }
}

int main()
{
    fin>>n>>m;
    for(i=0;i<m;++i)
    {
        fin>>x>>y>>c;
        q.cost=c; q.nr=y;
        l[x].push_back(q);
    }
    if(bf())
        fout<<"Ciclu negativ!";
    else
        for(i=2;i<=n;++i)
            fout<<d[i]<<" ";
    return 0;
}