Pagini recente » Cod sursa (job #855646) | Profil popoiu.george | Cod sursa (job #892449) | Cod sursa (job #1520636) | Cod sursa (job #2053162)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
const int oo=2000000000,nmax=50005;
vector <pair<int,int> > v[nmax];
int n,m,d[nmax],cycle;
void citire()
{
in>>n>>m;
int i,x,y,cost;
for(i=1;i<=m;i++)
{
in>>x>>y>>cost;
v[x].push_back(make_pair(y,cost));
}
}
void bellmanford()
{
int i,k,j;
for(i=2;i<=n;i++)
d[i]=oo;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=0;j<v[i].size();j++)
{
int vecin=v[i][j].first;
int cost=v[i][j].second;
d[vecin]=min(d[vecin],d[i]+cost);
}
}
}
for(i=1;i<=n;i++)
{
for(j=0;j<v[i].size();j++)
{
int vecin=v[i][j].first,cost=v[i][j].second;
if(d[vecin]>d[i]+cost)
{
cycle=1;
}
}
}
}
int main()
{
int i;
citire();
bellmanford();
if(cycle==1)
out<<"Ciclu negativ!";
else
for(i=2;i<=n;i++)
out<<d[i]<<" ";
return 0;
}