Pagini recente » Cod sursa (job #659142) | Cod sursa (job #1521201) | Cod sursa (job #2299934) | Cod sursa (job #2392909) | Cod sursa (job #2369254)
#include <fstream>
#include <queue>
#include <vector>
#include <iostream>
#define NMax 50005
#define oo 250005
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n, m, d[NMax], viz[NMax], incoada[NMax];
vector < pair <int, int> > G[NMax];
queue <int> q;
void read(){
fin >> n >> m;
for(int i = 1; i <= m; ++i){
int x, y, c;
fin >> x >> y >> c;
G[x].push_back(make_pair(y, c));
}
}
int bellmanford(){
for(int i = 2; i <= n; ++i)
d[i] = oo;
d[1] = 0;
q.push(1);
incoada[1] = 1;
while(!q.empty()){
int curent = q.front();
viz[curent]++;
if(viz[curent] >= n)
return false;
q.pop();
incoada[curent] = 0;
for(int i = 0; i < G[curent].size(); ++i){
int vecin = G[curent][i].first;
int cost = G[curent][i].second;
if(d[vecin] > d[curent] + cost){
d[vecin] = d[curent] + cost;
if(!incoada[vecin])
q.push(vecin);
}
}
}
return true;
}
void print(){
if(bellmanford() == 1)
for(int i = 2; i <= n; ++i)
fout << d[i] << " ";
else fout << "Ciclu negativ!";
}
int main(){
read();
print();
// fin.close();
// fout.close();
return 0;
}