Cod sursa(job #588838)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 9 mai 2011 19:16:32
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream.h>
#define N 50001
#define M 1500000
typedef struct queue
{long nel,ultim,prim,elem[M];};
typedef struct nod
{long cost,info;
struct nod *urm;}Nod,*list;
typedef list graf[N];
graf g;
list r;
queue q;
long m,k,d[N],co,n,i,j,p,t,l;

void addQ(queue &q,long x)
{q.nel++;
q.elem[q.ultim++]=x;}

long delQ(queue &q)
{q.nel--;
return q.elem[q.prim++];}

void push(list &r,long x,long co)
{Nod *c=new Nod;
c->info=x;
c->cost=co;
c->urm=r;
r=c;}

int main()
{q.nel=q.prim=q.ultim=0;
ifstream f("bellmanford.in");
ofstream h("bellmanford.out");
scanf("%ld%ld",&n,&m);
for(i=1;i<=n;i++)
     {d[i]=N;
     g[i]=NULL;}
for(k=1;k<=m;k++)
     {f>>l>>j>>co;
     push(g[l],j,co);}
d[1]=0,addQ(q,1);
while(q.nel)
     {t=delQ(q);
     for(r=g[t];r!=NULL;r=r->urm)
     if(d[r->info]>d[t]+r->cost)
            {d[r->info]=d[t]+r->cost;
            addQ(q,r->info);}
     else
            if(d[r->info]>0&&d[t]<0)
                  {h<<"Ciclu negativ!";
                  return 0;}}
for(i=2;i<=n;i++)
if(d[i]>0)
     h<<(d[i]%N)<<" ";
else
     h<<d[i]<<" ";
f.close();
h.close();
return 0;}