Pagini recente » Cod sursa (job #2464940) | Cod sursa (job #1552648) | Cod sursa (job #2214380) | Cod sursa (job #1063463) | Cod sursa (job #1119797)
#include<fstream>
#include<vector>
#include<list>
#define maxint 2147000000
#define dmax 50001
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct nod {int cost,nr;}q;
list<nod> lista;
list<nod>::iterator it;
vector< list<nod> >l(dmax,lista);
int i,n,m,x,y,c,d[dmax],app[dmax],viz[dmax],coada[10*dmax];
int bf()
{
int ls=0,ld=0;
coada[0]=1;
for(i=2;i<=n;++i)
d[i]=maxint;
while(ls<=ld)
{
x=coada[ls];
viz[x]=0;
for(it=l[x].begin();it!=l[x].end();++it)
{
y=it->nr;
c=it->cost;
if(d[y]>d[x]+c)
{
d[y]=d[x]+c;
if(!viz[y])
{
if(app[y]>n)
return 1;
++app[y];
coada[++ld]=y;
viz[y]=1;
}
}
}
++ls;
}
}
int main()
{
fin>>n>>m;
for(i=0;i<m;++i)
{
fin>>x>>y>>c;
q.cost=c; q.nr=y;
l[x].push_back(q);
}
if(bf())
fout<<"Ciclu negativ!";
else
for(i=2;i<=n;++i)
fout<<d[i]<<" ";
return 0;
}