Pagini recente » Cod sursa (job #2623229) | Cod sursa (job #700224) | Cod sursa (job #2678289) | Cod sursa (job #3265138) | Cod sursa (job #2704226)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
vector< pair<int,int> >G[50002];
queue <int> Q;
int n,m,i,j,val,oki,dist[50002],viz[50002],v[50002];
int belmanford()
{
int x,i,cnt,j,y,cost;
dist[1]=0;
for(i=2;i<=n;i++)
dist[i]=9999999;
Q.push(1);
v[1]=1;
while(!Q.empty())
{
x=Q.front();
viz[x]++;
Q.pop();
v[x]=0;
if(viz[x]>=n)
return 0;
for(i=0;i<G[x].size();i++)
{
y=G[x][i].first;
cost=G[x][i].second;
if(dist[y]>dist[x]+cost)
{
dist[y]=dist[x]+cost;
if(v[y]==0)
{
Q.push(y);
v[y]=1;
}
}
}
}
return 1;
}
int main()
{
f>>n>>m;
for(int k=1;k<=m;k++)
{
f>>i>>j>>val;
G[i].push_back(make_pair(j,val));
}
if(!belmanford())
g<<"Ciclu negativ!";
else
{
for(i=2;i<=n;i++)
g<<dist[i]<<" ";
}
f.close();
g.close();
return 0;
}