Pagini recente » Cod sursa (job #2714618) | Cod sursa (job #477028) | Cod sursa (job #1189352) | Cod sursa (job #2858262) | Cod sursa (job #948432)
Cod sursa(job #948432)
#include<fstream>
#include<list>
#include<vector>
#define DMAX 50002
#define INF 21000000
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct nod
{
int nr,cost;
}q,coada[3*DMAX];
list<nod> lista;
list<nod>::iterator it;
vector< list<nod> > l(DMAX,lista);
int i,j,c,n,m,d[DMAX],viz[DMAX],app[DMAX];
int bellman_ford()
{
int ls=0,ld=0,i,j,c;
q.nr=1; q.cost=0;
coada[0]=q;
viz[1]=1; app[1]=1;
for(i=2;i<=n;++i)
d[i]=INF;
while(ls<=ld)
{
i=coada[ls].nr;
viz[i]=0;
for(it=l[i].begin();it!=l[i].end();++it)
{
j=it->nr;
c=it->cost;
if(d[j]>d[i]+c)
{
d[j]=d[i]+c;
if(!viz[j])
{
if(app[j]>n)
return 1;
++app[j];
viz[j]=1;
q.nr=j;
q.cost=c;
coada[++ld]=q;
}
}
}
++ls;
}
return 0;
}
int main()
{
fin>>n>>m;
while(fin>>i>>j>>c)
{
q.nr=j;
q.cost=c;
l[i].push_back(q);
}
if(bellman_ford())
fout<<"Ciclu negativ!";
else
for(i=2;i<=n;++i)
fout<<d[i]<<" ";
return 0;
}