Cod sursa(job #2399731)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 7 aprilie 2019 22:29:49
Problema Algoritmul Bellman-Ford Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;

const int dim = 1000;
const int infinity = 1e7;

vector< pair<int,int> >G[dim];
int check[dim];
int d[dim];
int nodes, edges;

void input() {
    ifstream in("bellmanford.in");
    //freopen("grafB.in", "r", stdin);
    in >> nodes >> edges;
    for (int i = 1; i <= edges; i++) {
        int firstNode, secondNode, distance;
        in >> firstNode >> secondNode >> distance;
        G[firstNode].push_back(make_pair(secondNode, distance));
    }
}

int main() {

    input();
    queue<int> q;
    for (int i = 1; i <= nodes; i++) {
        d[i] = infinity;
    }

    int node = 1;
    check[node] = 1;
    d[node] = 0;
    q.push(node);

    while (q.empty() == false) {
        int u = q.front();
        q.pop();
        //check[u] = false;
        for (size_t j = 0; j < G[u].size(); j++) {
            int v = G[u][j].first;
            int distance = G[u][j].second;
            if (d[v] > d[u] + distance) {
                if (check[v] == nodes + 1) {
                    cout << "Ciclu negativ !\n";
                    return 0;
                }
                d[v] = d[u] + distance;
                check[v]++;
                q.push(v);
            }
        }
    }
     freopen("bellmanford.out", "w", stdout);
     for (int i = 2; i <= nodes; ++i) {
        cout << d[i] << ' ';
    }

    return 0;
}