Pagini recente » Cod sursa (job #967407) | Cod sursa (job #2150475) | Cod sursa (job #2379015) | Cod sursa (job #2204371) | Cod sursa (job #2898311)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int NMAX=50005;
const int INF=INT_MAX;
int n,m;
int d[NMAX],viz[NMAX];
bool incoada[NMAX];
vector <pair<int,int>> v[NMAX];
queue <int> Q;
bool Bellmanford(int start){
for(int i=1;i<=n;i++){
d[i]=INF;
incoada[i]=0;
viz[i]=0;
}
d[start]=0;
Q.push(start);
incoada[start]=true;
while(!Q.empty()){
int nodcurent = Q.front();
viz[nodcurent]++;
if(viz[nodcurent]>=n)
return false;
Q.pop();
incoada[nodcurent]=false;
for(unsigned int i=0;i<v[nodcurent].size();i++){
int vecin=v[nodcurent][i].first;
int cost=v[nodcurent][i].second;
if(d[nodcurent]+cost<d[vecin]){
d[vecin]=d[nodcurent]+cost;
if(incoada[vecin]==false){
Q.push(vecin);
incoada[vecin]=true;
}
}
}
}
return true;
}
int main(){
fin>>n>>m;
int x,y,c;
for(int i=1;i<=m;i++){
fin>>x>>y>>c;
v[x].push_back(make_pair(y,c));
}
if(Bellmanford(1)){
for(int i=2;i<=n;i++)
fout<<d[i]<<" ";
}
else
fout<<"Ciclu negativ!";
return 0;
}