Pagini recente » Cod sursa (job #2608792) | Cod sursa (job #2647120) | Cod sursa (job #1224599) | Cod sursa (job #1323470) | Cod sursa (job #2697149)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INF 274122
#define NMAX 50001
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
vector<pair<int,int> > v[NMAX];
int d[NMAX],fr[NMAX], viz[NMAX];
int n,m;
queue<int> q;
int bellman(int sursa)
{
for(int i=1;i<=n;i++)
{
viz[i]=0;
fr[i]=0;
d[i]=INF;
}
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);
fr[vec]=1;
}
}
}
}
return 1;
}
int main()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
f>>x>>y>>z;
v[x].push_back({y,z});
}
if(bellman(1))
{
for(int i=2;i<=n;i++)
g<<d[i]<<" ";
}
else
g<<"Ciclu negativ!";
return 0;
}