Pagini recente » Monitorul de evaluare | Statistici popescu claudia nicoleta (popescu_nikoleta) | Cod sursa (job #2976067) | Cod sursa (job #529714) | Cod sursa (job #3341953)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#define NMAX 50005
#define EMAX 250005
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");
int nodes, edges, dist[NMAX];
struct edge {
int x, y, cost;
}arr[EMAX];
bool bellmanford (){
for (int i=1; i<=nodes; ++i)
dist[i] = INT_MAX;
dist[1] = 0;
for (int i=1; i<=nodes; ++i){
for (int j=0; j<edges; ++j){
if (dist[arr[j].x] != INT_MAX && dist[arr[j].y] > dist[arr[j].x] + arr[j].cost){
if (i == nodes)
return false;
dist[arr[j].y] = dist[arr[j].x] + arr[j].cost;
}
}
}
return true;
}
int main (){
in >> nodes >> edges;
for (int i=1; i<=edges; ++i)
in >> arr[i].x >> arr[i].y >> arr[i].cost;
bool flag = bellmanford();
if (!flag){
out << "Ciclu negativ!";
return 0;
}
for (int i=2; i<=nodes; ++i)
out << dist[i] << ' ';
return 0;
}