Pagini recente » Cod sursa (job #2520007) | Cod sursa (job #883909) | Cod sursa (job #2952079) | Cod sursa (job #204828) | Cod sursa (job #2672284)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define oo 274122
#define mac 50001
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
vector<pair<int,int> > v[mac];
int d[mac],fr[mac], viz[mac];
int n,m;
queue<int> q;
void citire()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
fin>>x>>y>>z;
v[x].push_back({y,z});
}
}
int bellman(int sursa)
{
for(int i=1;i<=n;i++)
{
viz[i]=0;
fr[i]=0;
d[i]=oo;
}
d[sursa]=0;
q.push(sursa);
fr[sursa]=1;
while(!q.empty())
{
int curent=q.front();
viz[curent]++;
if(viz[curent]>=n) return 0;
q.pop();
fr[curent]=0;
for(size_t i=0;i<v[curent].size();i++)
{
int vec,cot;
vec=v[curent][i].first;
cot=v[curent][i].second;
if(d[curent]+cot < d[vec])
{
d[vec] = d[curent]+cot;
if(!fr[vec])
{
q.push(vec);
}
}
}
}
return 1;
}
void afisare()
{
if(bellman(1))
{
for(int i=2;i<=n;i++)
fout<<d[i]<<" ";
}
else
fout<<"Ciclu negativ!";
}
int main()
{
citire();
afisare();
return 0;
}