Pagini recente » Cod sursa (job #2680153) | Cod sursa (job #2754821) | Cod sursa (job #304175) | Cod sursa (job #956239) | Cod sursa (job #2862952)
#include <fstream>
#include <queue>
#define NMAX 50003
#define INF 1000000000
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n, m, x0, cmin[NMAX], prec[NMAX], nr[NMAX];
queue <int> C;
struct varf
{
int x;
int c;
};
bool ok;
vector <varf> LA[NMAX];
void citire();
bool bellmanford();
void afisare();
int main()
{
citire();
ok=bellmanford();
afisare();
return 0;
}
void citire()
{
int i, x, y, c;
varf a;
fin>>n>>m;
for (i=1; i<=m; i++)
{
fin>>x;
fin>>a.x>>a.c;
LA[x].push_back(a);
}
x0=1;
}
bool bellmanford()
{
int x, i;
for (i=1; i<=n; i++)
cmin[i]=INF;
cmin[x0]=0;
C.push(x0);
nr[x0]=1;
while (!C.empty())
{
x=C.front();
C.pop();
for (i=0; i<LA[x].size(); i++)
if (cmin[LA[x][i].x]>cmin[x]+LA[x][i].c)
{
cmin[LA[x][i].x]=cmin[x]+LA[x][i].c;
prec[LA[x][i].x]=x;
nr[LA[x][i].x]++;
C.push(LA[x][i].x);
if (nr[LA[x][i].x]>=n)
return 0;
}
}
return 1;
}
void afisare()
{
int i;
if(ok==0)
fout<<"Ciclu negativ!";
else
{
for(i=2; i<=n; i++)
fout<<cmin[i]<<' ';
fout<<'\n';
;
}
}