Pagini recente » Cod sursa (job #3181466) | Cod sursa (job #494409) | Cod sursa (job #1260122) | Cod sursa (job #309560) | Cod sursa (job #2697143)
#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> > graph[NMAX];
int dist[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;
dist[i]=INF;
}
dist[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<graph[curent].size();i++)
{
int vec,cot;
vec=graph[curent][i].first;
cot=graph[curent][i].second;
if(dist[curent]+cot < dist[vec])
{
dist[vec] = dist[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;
graph[x].push_back({y, z});
}
if(bellman(1))
{
for(int i = 2; i <= n; i++)
g << dist[i] << " ";
}
else
g <<" Ciclu negativ!";
return 0;
}