Pagini recente » Cod sursa (job #1816218) | Cod sursa (job #2966530) | Cod sursa (job #2854547) | Cod sursa (job #924518) | Cod sursa (job #903583)
Cod sursa(job #903583)
#include <fstream>
#define inf 1001
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct node
{
int nr,dist;
node *next;
} *v[50001];
int q[50001],d[50001],n,m,i;
void create_graph ()
{
int a,b,di; node *d;
fin>>a>>b>>di;
d=new node;
d->nr=b;
d->dist=di;
d->next=v[a];
v[a]=d;
}
bool bellman_ford ()
{
int p,u,x,i; p=u=1; node *l;
q[1]=1;
for (i=1;i<=n;i++) d[i]=inf;
d[1]=0;
while (p<=u)
{
x=q[p];
l=v[x];
while (l)
{
if (d[l->nr]>d[x]+l->dist)
{
d[l->nr]=d[x]+l->dist;
q[++u]=l->nr;
}
l=l->next;
}
p++;
}
for (i=1;i<=n;i++)
{
l=v[i];
while (l)
{
if(d[l->nr]>d[i]+l->dist) return 0;
l=l->next;
}
}
return 1;
}
int main()
{
fin>>n>>m;
for (i=1;i<=m;i++) create_graph ();
if (!bellman_ford())
{
fout<<"Ciclu negativ!";
return 0;
}
else for (i=2;i<=n;i++)
{
fout<<d[i]<<" ";
}
return 0;
}