Pagini recente » Cod sursa (job #3305545) | Cod sursa (job #1630784) | Cod sursa (job #3306355) | Cod sursa (job #3329490) | Cod sursa (job #3342964)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
#define NMAX 50005
int dist[NMAX];
int viz[NMAX];
int n;
vector<pair<int,int>> g[NMAX];
bool bellmanford(int p){
for(int i=0;i<NMAX;i++){
dist[i]=INT_MAX;
}
queue<int> q;
q.push(p);
dist[p]=0;
while(!q.empty()){
int x = q.front();
viz[x]++;
if(viz[x]==n){
return true;
}
q.pop();
for(auto i :g[x]){
if(dist[x]+i.second < dist[i.first]){
q.push(i.first);
dist[i.first]=dist[x]+i.second;
}
}
}
return false;
}
int main()
{
int m;
fin>>n>>m;
for(int i=0;i<m;i++){
int a,b,c;
fin>>a>>b>>c;
g[a].push_back({b,c});
}
if(!bellmanford(1)){
for(int i=2;i<=n;i++){
fout<<dist[i]<<" ";
}
}
else{
fout<<"Ciclu negativ!";
}
return 0;
}