Pagini recente » Cod sursa (job #1822549) | Cod sursa (job #622275) | Cod sursa (job #1123926) | Cod sursa (job #628920) | Cod sursa (job #2345832)
#include <bits/stdc++.h>
#define N 50000
#define Mxn 2000000000
std::queue<int> h;
std::vector< std::pair<int, int> > d[N];
int best[N];
int inq[N];
int prc[N];
void reset()
{
for(int i=1; i<N; i++)
best[i]=Mxn;
best[0]=0;
inq[0]=1;
}
int main()
{
int n,m,i,a,b,c,x=1,nod,val,nod2,val2;
FILE*fi,*fo;
fi=fopen("bellmanford.in","r");
fo=fopen("bellmanford.out","w");
fscanf(fi,"%d%d",&n,&m);
for(i=0; i<m; i++)
{
fscanf(fi,"%d%d%d",&a,&b,&c);
a--;
b--;
d[a].push_back({b,c});
}
reset();
h.push(0);
while(h.empty()!=1 && x==1)
{
nod=h.front();
val=best[nod];
h.pop();
inq[nod]=0;
for(i=0; i<d[nod].size(); i++)
{
nod2=d[nod][i].first;
val2=val+d[nod][i].second;
if(best[nod2]>val2)
{
best[nod2]=val2;
if(inq[nod2]==0)
{
h.push(nod2);
inq[nod2]=1;
}
prc[nod2]++;
if(prc[nod2]>=n)
x=0;
}
}
}
if(x==0)
fprintf(fo,"Ciclu negativ!");
else
{
for(i=1; i<n; i++)
{
fprintf(fo,"%d ",best[i]);
}
}
fclose(fi);
fclose(fo);
return 0;
}