Cod sursa(job #1312457)

Utilizator blue_skyPetrica Stefan Cosmin blue_sky Data 9 ianuarie 2015 15:48:43
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <cstdio>
#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;
    FILE *f=fopen("bellmanford.in","r"), *g=fopen("bellmanford.out","w");
    fscanf(f,"%d %d",&n,&m);
    for(int i=1;i<=m;++i)
    {
        point q;
        //f>>x>>y>>q.cost;
        fscanf(f,"%d %d %d",&x,&y,&q.cost);
        q.x=y;
        nod[x].push_back(q);
    }

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