Pagini recente » Cod sursa (job #812639) | Cod sursa (job #973975) | Cod sursa (job #2448006) | Cod sursa (job #1572695) | Cod sursa (job #2856718)
#include <fstream>
#include<vector>
#include <queue>
#define NMAX 102
#define INF 10000001
using namespace std;
ifstream fin("bellmanford.in.");
ofstream fout("bellmanford.out");
struct varf
{
int x,c;
};
int n;
vector<varf> G[NMAX];///liste de adiacenta cu costuri
bool uz[NMAX];
int cmin[NMAX];
int afis[NMAX];
int pre[NMAX];
int nr[NMAX];
queue<int>C;
void citire();
void dj();
void afisare();
bool bellmanford();
bool rez;
int x0=1;
int m;
int main()
{
citire();
rez=bellmanford();
afisare();
return 0;
}
void citire()
{
int i,j,c;
varf aux;
fin>>n>>m;
while(fin>>i>>j>>c)
{
/// in lista de adiacenta a lui i trebuie sa adaug perechea j,c
aux.x=j;
aux.c=c;
G[i].push_back(aux);
}
for(i=1; i<=n; i++)cmin[i]=INF;
cmin[x0]=0;
}
bool bellmanford()
{ int x,vf,cost,i;
C.push(x0);nr[x0]=1;
while(!C.empty())
{
x=C.front();
C.pop();
///parcurg lista de adiacenta a lui x
for(i=0;i<G[x].size();i++)
{
vf=G[x][i].x;
cost=G[x][i].c;
if(cmin[vf]>cmin[x]+cost)
{
cmin[vf]=cmin[x]+cost;
C.push(vf);
if(nr[vf]==n)
return 0;
}
}
}
return 1;
}
void afisare()
{
int cnt,j;
if(rez==0)fout<<"Ciclu negativ!";
else
for(int i=2;i<=n;i++)fout<<cmin[i]<<" ";
fout<<endl;
}