Pagini recente » Cod sursa (job #939960) | Cod sursa (job #334380) | Cod sursa (job #2961522) | Cod sursa (job #2979468) | Cod sursa (job #3039199)
#include <fstream>
#include <queue>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,m,L[250003],urm[250003],vec[250003],cost[250003],t[50003],dist[50003],viz[50003],nr[50003];
const int inf=2e9;
queue <int> Q;
void Add(int x1, int x2, int val, int i)
{
urm[i]=L[x1];
cost[i]=val;
vec[i]=x2;
L[x1]=i;
}
bool Bellman_Ford()
{
int nc,x,y,z;
Q.push(1);
viz[1]=1;
while (!Q.empty())
{
x=Q.front();
z=L[x];
while (z)
{
y=vec[z];
if (dist[y]>dist[x]+cost[z])
{
dist[y]=dist[x]+cost[z];
if (!viz[y])
{
Q.push(y);
viz[y]=1;
nr[y]++;
if (nr[y]>=n)
return 1;
}
}
z=urm[z];
}
viz[x]=0;
Q.pop();
}
return 0;
}
int main()
{
int i,j,inc,sf,nc,x1,x2,val;
f >> n >> m;
for (i=1;i<=m;i++)
{
f >> x1 >> x2 >> val;
Add(x1,x2,val,i);
}
for (i=1;i<=n;i++)
dist[i]=inf;
dist[1]=0;
if (Bellman_Ford())
g << "Ciclu negativ!";
else
{
for (i=2;i<=n;i++)
g << dist[i] << ' ';
}
return 0;
}