Pagini recente » Cod sursa (job #2687474) | Cod sursa (job #2674786) | Cod sursa (job #1676411) | Cod sursa (job #854286) | Cod sursa (job #1816242)
#include <iostream>
#include<fstream>
#include<queue>
#define inf 100000000
using namespace std;
ifstream f("bellmanford.in");
ofstream gout("bellmanford.out");
int n,m,i,cst,x,y,v[50001],j,k,ct,nod;
vector<int>q;
vector<pair<int,int> >g[50001];
bool ok,del[50001];
struct muchie
{
int x,y;
};
muchie c[250001];
int functie(int i,int j,int c)
{
if(v[j]>v[i]+c)
{
v[j]=v[i]+c;
return 1;
}
return 0;
}
void sterge(int j)
{
swap(q[j],q[q.size()-1]);
q.pop_back();
}
int main()
{
f>>n>>m;
q.push_back(0);
for(i=1; i<=m; i++)
{
f>>x>>y>>cst;
g[x].push_back(make_pair(y,cst));
}
v[1]=0;
for(i=2; i<=n; i++)
v[i]=inf;
q.push_back(1);
for(i=1; i<n; i++)
for(j=1; j<q.size(); j++)
{
nod=q[j];
for(k=0; k<g[nod].size(); k++)
{
if(functie(nod,g[nod][k].first,g[nod][k].second))
q.push_back(g[nod][k].first);
else
for(int p=1; p<q.size(); p++)
if(q[p]==g[nod][k].first)
{
sterge(p);
break;
}
}
}
ok=1;
for(j=1; j<q.size(); j++)
{
nod=q[j];
for(k=0; k<g[nod].size(); k++)
if(functie(nod,g[nod][k].first,g[nod][k].second))
{
ok=0;
gout<<"Ciclu negativ!";
}
else
sterge(j);
}
if(ok)
for(i=2; i<=n; i++)
gout<<v[i]<<' ';
}