Pagini recente » Cod sursa (job #2569023) | Cod sursa (job #2761863) | Cod sursa (job #932699) | Cod sursa (job #1429220) | Cod sursa (job #519181)
Cod sursa(job #519181)
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#define N 50001
typedef struct stack
{long st[N],sp;};
typedef struct nod1
{long info1;
struct nod1 *next;}Nod1;
typedef struct
{Nod1 *prim1,*ultim1;}coada1;
typedef struct nod2
{long info2,cost;
struct nod2 *urm;}Nod2,*list;
typedef list graf[N];
long n,m,i,j,k,d[N],c;
graf g;
coada1 q1;
list r;
void push(stack &s,long x)
{s.st[++s.sp]=x;}
long pop(stack &s)
{return s.st[s.sp--];}
/*void push1(coada1 &q,long x)
{Nod1 *c=new Nod1;
c->info1=x;
c->next=NULL;
if(q.prim1==NULL)
q.prim1=q.ultim1=c;
else
{q.ultim1->next=c;
q.ultim1=c;}}
long pop1(coada1 &q)
{long x=q.prim1->info1;
Nod1 *t=q.prim1->next;
free(q.prim1);
q.prim1=t;
if(q.prim1==NULL)
q.ultim1=NULL;
return x;}*/
void push2(list &r,long x,long co)
{Nod2 *c=new Nod2;
c->info2=x;
c->cost=co;
c->urm=r;
r=c;}
int main()
{fstream f1("bellmanford.in",ios::in);
fstream f2("bellmanford.out",ios::out);
q1.prim1=q1.ultim1=NULL;
f1>>n>>m;
for(i=1;i<=n;i++)
{d[i]=N;
g[i]=NULL;}
for(k=1;k<=m;k++)
{f1>>i>>j>>c;
push2(g[i],j,c);}
/*d[1]=0;
push1(q1,1);
while(q1.prim1!=NULL)
{i=pop1(q1);
for(r=g[i];r!=NULL;r=r->urm)
if(d[r->info2]>d[i]+r->cost)
{d[r->info2]=d[i]+r->cost;
push1(q1,r->info2);}
else
if(d[r->info2]>0&&d[i]<0)
{f2<<"Ciclu negativ!";
return 0;}}*/
stack s;
s.sp=0;
push(s,1);
while(s.sp!=0)
{i=pop(s);
for(r=g[i];r!=NULL;r=r->urm)
if(d[r->info2]>d[i]+r->cost)
{d[r->info2]=d[i]+r->cost;
push(s,r->info2);}
else
if(d[r->info2]>0&&d[i]<0)
{f2<<"Ciclu negativ!";
return 0;}}
for(k=2;k<=n;k++)
if(d[k]>0)
f2<<d[k]%50001<<" ";
else
f2<<d[k]<<" ";
f1.close();
f2.close();
return 0;}