Pagini recente » Cod sursa (job #319471) | Cod sursa (job #2326260) | Cod sursa (job #3139026) | Cod sursa (job #612227) | Cod sursa (job #2718578)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fi("bellmanford.in");
ofstream fo("bellmanford.out");
int n,m,i,j,k,d[50001],nrap[50001],c;
#define inf 1<<29
vector<pair<int,int>>v[50001];
queue<int>q;
bool fv[50001],neg;
void bf(bool &neg)
{
int i,x,nod,c;
size_t j;
neg=false;
for(i=1;i<=n;i++)
{
d[i]=inf;
}
d[1]=0;
q.push(1);
fv[1]=true;
while(!q.empty() && !neg)
{
x=q.front();
q.pop();
fv[x]=false;
for(j=0;j<v[x].size();j++)
{
nod=v[x][j].first;
c=v[x][j].second;
if(d[nod]>d[x]+c)
{
d[nod]=d[x]+c;
if(!fv[nod])
{
if(nrap[nod]>n)
neg=true;
else
{
q.push(nod);
fv[nod]=false;
nrap[nod]++;
}
}
}
}
}
}
int main()
{
fi>>n>>m;
for(k=1;k<=m;k++)
{
fi>>i>>j>>c;
v[i].push_back(make_pair(j,c));
}
bf(neg);
if(neg)
fo<<"Ciclu negativ!";
else
{
for(i=2;i<=n;i++)
{
fo<<d[i]<<" ";
}
}
return 0;
}