Pagini recente » Cod sursa (job #1445233) | Cod sursa (job #3245062) | Cod sursa (job #2343975) | Cod sursa (job #2033905) | Cod sursa (job #2420600)
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
const int NMAX = 50005;
const int inf = 1e9;
struct muchie{
int node, cost;
};
int n,m,dist[NMAX],cot[NMAX];
muchie z;
bool ciclu;
vector < muchie > v[NMAX];
deque < int > q;
void bellman(const int start_node){
int nod,i;
q.push_back(start_node);
for(i = 1 ; i <= n ; i++)
dist[i] = inf;
dist[1] = 0;
while(!q.empty()){
nod = q.front();
q.pop_front();
for(i = 0 ; i < v[nod].size() && !ciclu; i++)
if(dist[v[nod][i].node] > dist[nod] + v[nod][i].cost){
dist[v[nod][i].node] = dist[nod] + v[nod][i].cost;
q.push_back(v[nod][i].node);
cot[v[nod][i].node]++;
if(cot[v[nod][i].node] > n)
ciclu = 1;
}
}
}
int main(){
int i, a, b, c;
f >> n >> m;
for(i = 1 ; i <= m ; i++){
f >> a >> b >> c;
z.node = b;
z.cost = c;
v[a].push_back(z);
}
bellman(1);
if(ciclu)
g << "Ciclu negativ!" << "\n";
else{
for(i = 2 ; i <= n ; i++)
g << dist[i] << " ";
}
return 0;
}