Pagini recente » Cod sursa (job #1424510) | Cod sursa (job #656810) | Cod sursa (job #1969255) | Cod sursa (job #2139657) | Cod sursa (job #2344545)
#include <bits/stdc++.h>
#define N 50000
#define wrs 2000000000
std::queue<int> q;
std::vector<int> d[N][2];
int best[N];
int parc[N];
char inq[N];
void reset()
{
for(int i=0; i<N; i++)
{
best[i]=wrs;
}
}
int main()
{
int n,m,a,b,c,i,x=1,nod,val,nod2;
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][0].push_back(b);
d[a][1].push_back(c);
}
q.push(0);
inq[0]=1;
reset();
best[0]=0;
while(q.empty()!=1 && x==1)
{
nod=q.front();
q.pop();
inq[nod]=0;
for(i=0; i<d[nod][0].size(); i++)
{
val=best[nod]+d[nod][1][i];
nod2=d[nod][0][i];
if(best[nod2]>val)
{
best[nod2]=val;
parc[nod2]++;
if(parc[nod2]==n)
x=0;
if(inq[nod2]==0)
{
q.push(nod2);
inq[nod2]=1;
}
}
}
}
if(x==1)
{
for(i=1; i<n; i++)
{
fprintf(fo,"%d ",best[i]);
}
}
else fprintf(fo,"Ciclu negativ!");
fclose(fi);
fclose(fo);
return 0;
}