Pagini recente » Cod sursa (job #1793269) | Cod sursa (job #274222) | Cod sursa (job #2888613) | Cod sursa (job #1793143) | Cod sursa (job #2083488)
#include <iostream>
#include <fstream>
#define Nmax 50001
#define Cmax 250000001
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
struct nodl{
int info;
int cost;
nodl *urm;
};
int m,n;
nodl *G[Nmax];
int d[Nmax];
void add(int x,int y,int z)
{
nodl *k=new nodl;
k->info=y;
k->cost=z;
k->urm=G[x];
G[x]=k;
}
void citire()
{
f>>n>>m;
int x,y,z;
for(int i=1;i<=n;i++)
{
f>>x>>y>>z;
add(x,y,z);
}
}
void maxv()
{
d[1]=0;
for(int i=2;i<=n;i++)
d[i]=Cmax;
}
struct ec{
int info;
ec *urm;
};
void init(int v[])
{
for(int i=1;i<=Nmax;i++)
v[i]=0;
}
void BF()
{
int i,x;
bool prezc[Nmax];
ec *coada;
ec *in=new ec;
in->urm=NULL;
in->info=1;
ec *sf;
sf=in;
nodl *parc;
ec *ad;
int nrapar[Nmax];
init(nrapar);
while(in!=NULL and nrapar[in->info]<=n)
{
x=in->info;
nrapar[x]++;
prezc[x]=false;
for(parc=G[x];parc!=NULL;parc=parc->urm)
if(d[parc->info]>d[x]+parc->cost)
{
d[parc->info]=d[x]+parc->cost;
if(!prezc[parc->info])
{
prezc[parc->info]=true;
ad=new ec;
ad->info=parc->info;
sf->urm=ad;
ad->urm=NULL;
sf=ad;
}
}
in=in->urm;
}
}
void afis()
{
for(int i=2;i<=n;i++)
g<<d[i]<< " ";
}
int main()
{
citire();
maxv();
BF();
afis();
return 0;
}