Cod sursa(job #2198506)

Utilizator bianca.tazlauanuBianca Tazlauanu bianca.tazlauanu Data 24 aprilie 2018 16:01:08
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
#include <queue>

#define NMAX 50005
#define INF (1 << 29)
 
using namespace std;

int d[NMAX];
vector<pair<int, int>> graph[NMAX];
 
int main() {
    int N, M, A, B, C;
    d[1] = 0;

    ifstream in("bellmanford.in");
    ofstream out ("bellmanford.out");

    in >> N >> M;
 
    for (int i = 0; i < M; i++) {
        in >> A >> B >> C;
        graph[A].push_back(make_pair(B, C));
    }

    vector<int> check(N + 1, 0);
    queue<int> q;

    for (int i = 1; i <= N; i++) {
    	d[i] = INF;
	check[i] = 0;
    }

    d[1] = 0;

    q.push(1);
 
    while (!q.empty()) {
        int current_node = q.front();
        q.pop();

        for (pair<int, int> n : graph[current_node]) {
	    int node = n.first;
            int dist = n.second;

            if (d[node] > d[current_node] + dist) { 
		d[node] = d[current_node] + dist;

                q.push(node);
                check[node]++;

                if (check[node] == N) {
                    out << "Ciclu negativ!";
                    return 0;
                }
            }
        }
    }
 
    for (int i = 2 ; i <= N; i++) {
	 if (d[i] == INF) {
		out << 0 << " ";
	 
	 } else {
		out << d[i] << " ";
	 }
    }

    out.close();
    in.close();

    return 0;
}