Pagini recente » Cod sursa (job #751386) | Cod sursa (job #748331) | Cod sursa (job #1174762) | Cod sursa (job #1010887) | Cod sursa (job #1929639)
#include <iostream>
#include <climits>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
const int NMax = 1e5 + 5;
int N,M;
int dist[NMax];
bool inCoada[NMax];
int nrInCoada[NMax];
struct muchie {
int y,c;
muchie() {
muchie(1,0);
}
muchie(int a,int b) {
y = a;
c = b;
}
};
vector<muchie> v[NMax];
int main() {
in>>N>>M;
for (int i=1;i<=M;++i) {
int x,y,c;
in>>x>>y>>c;
muchie e(y,c);
v[x].push_back(e);
}
for (int i=2;i<=N;++i) {
dist[i] = 1e8;
}
dist[1] = 0;
bool cicluNegativ = false;
queue<int> Q;
Q.push(1);
while (Q.size()) {
int nod = Q.front();
Q.pop();
++nrInCoada[nod];
if (nrInCoada[nod]>=N) {
cicluNegativ = true;
break;
}
inCoada[nod] = 0;
vector<muchie>::iterator it;
for (it = v[nod].begin();it < v[nod].end(); ++it) {
if (dist[it->y] > dist[nod] + (it->c)) {
dist[it->y] = dist[nod] + (it->c);
if (!inCoada[it->y]) {
Q.push(it->y);
// inCoada[it->y] = true; <---
}
}
}
}
if (cicluNegativ) {
out<<"Ciclu negativ!";
}
else {
for (int i=2;i<=N;++i) {
out<<dist[i]<<' ';
}
return 0;
}
in.close();out.close();
return 0;
}