Pagini recente » Cod sursa (job #442337) | Cod sursa (job #1665168) | Cod sursa (job #1117875) | Cod sursa (job #191958) | Cod sursa (job #2365196)
#include <bits/stdc++.h>
#define NMAX 50005
#define INF INT_MAX/2
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
queue<int> coada;
struct graf{int varf,cost;};
vector<graf>G[NMAX];
int n,m,start=1;
bool uz[NMAX];
int cmin[NMAX];
int nr[NMAX];
void citire();
bool bellman();
void afisare(int x);
int main()
{citire();
afisare(bellman());
return 0;
}
void citire()
{int i,x,y,cost;
fin>>n>>m;
for(i=0;i<m;i++)
{fin>>x>>y>>cost;
G[x].push_back({y,cost});
}
}
bool bellman()
{int i,x;
coada.push(start);
for(i=1;i<=n;i++)
cmin[i]=INF;
cmin[start]=0;
while(!coada.empty())
{x=coada.front();
coada.pop();
///parcurg lista de adiacenta a lui x
for(i=0;i<G[x].size();i++)
if(cmin[G[x][i].varf]>cmin[x]+G[x][i].cost)
{cmin[G[x][i].varf]=cmin[x]+G[x][i].cost;
nr[G[x][i].varf]++;
if(nr[G[x][i].varf]==n)
return 0;
coada.push(G[x][i].varf);
}
}
return 1;
}
void afisare(int x)
{int i;
if(x==0)
fout<<"Ciclu negativ!"<<'\n';
else
for(i=2;i<=n;i++)
fout<<cmin[i]<<' ';
}