Cod sursa(job #1312453)

Utilizator blue_skyPetrica Stefan Cosmin blue_sky Data 9 ianuarie 2015 15:45:15
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <list>
#define DIM 50001
#define INF 99999

using namespace std;
int n,m,x,y,c,d[DIM];
bool ok;

struct point
{
    int x,cost;
};

list<point> nod[DIM];

void bellmanford(int k)
{
    for(int i=1;i<=n;++i)
    d[i]=INF;
    d[k]=0;
    for(int i=1;i<=n;++i)
    {
        ok=0;
        for(int j=1;j<=n;++j)
            for(list<point>::iterator t=nod[j].begin();t!=nod[j].end();++t)
            {
                point q=*t;
                if(d[j]!=INF && q.x!=k && d[j]+q.cost<d[q.x])
                {
                    d[q.x]=d[j]+q.cost;
                    ok=1;
                }
            }
    }
}

int main()
{
    ifstream f("bellmanford.in");
    ofstream g("bellmanford.out");
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        point q;
        f>>x>>y>>q.cost;
        q.x=y;
        nod[x].push_back(q);
    }

    bellmanford(1);
    if(ok) g<<"Ciclu negativ!\n";
    else
    for(int i=2;i<=n;++i)
    g<<d[i]<<" ";
    g<<'\n';
    f.close();
    g.close();
    return 0;
}