Pagini recente » Cod sursa (job #1836704) | Cod sursa (job #814257) | Cod sursa (job #1080033) | Cod sursa (job #710119) | Cod sursa (job #2465054)
#include <bits/stdc++.h>
#define DIM 50005
using namespace std;
ifstream fin ("bellmanford.in");
ofstream fout ("bellmanford.out");
vector<pair<int,int>>g[DIM];
int v[DIM],d[DIM],p[DIM];
queue<int> q;
int n,m,x,y,c;
bool bellmanford(int x)
{
for(int i=1;i<=n;++i)
{
d[i]=INT_MAX;
v[i]=0;
p[i]=0;
}
d[x]=0;
q.push(x);
p[x]=1;
while(!q.empty())
{
int nod=q.front();
v[nod]++;
if(v[nod]>n)return false;
p[x]=0;q.pop();
for(int i=0;i<g[nod].size();++i)
{
int cost=g[nod][i].second;
int vecin=g[nod][i].first;
if(d[nod]+cost<d[vecin])
{
d[vecin]=d[nod]+cost;
if(!p[vecin])q.push(vecin);
}
}
}
return true;
}
int main()
{
fin >>n >>m;
for(int i=1;i<m;++i)
{
fin>>x >>y >>c;
g[x].push_back(make_pair(y,c));
}
if(bellmanford(1))
for(int i=2;i<=n;++i)
fout<<d[i]<<" ";
else fout<<"Ciclu negativ!";
return 0;
}