Cod sursa(job #2024855)

Utilizator S4lexandruAlexandru Stefanica S4lexandru Data 21 septembrie 2017 12:57:03
Problema Floyd-Warshall/Roy-Floyd Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <array>
#include <limits>
#include <fstream>

constexpr int NMAX=111;
constexpr int inf= std::numeric_limits<int>::max() >> 1;

int main() {
    int N;
    std::ifstream in{"royfloyd.in"};
    std::ofstream out{"royfloyd.out"};
    std::array<std::array<int, NMAX>, NMAX> graph;
    
    in >> N;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            in >> graph[i][j];

            if (0 == graph[i][j]) graph[i][j] = inf;
        }
    }

    for (int k = 0; k < N; ++k) {
        for (int i = 0; i < N; ++i) {
            if (i == k) continue;
            for (int j = 0; j < N; ++j) {
                if (i != j && j != k && graph[i][k] > graph[i][j] + graph[j][k]) {
                    graph[i][k] = graph[i][j] + graph[j][k];
                }
            }
        }
    }

    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            out << (graph[i][j] == inf ? 0 : graph[i][j]) << ' ';
        }
        out << '\n';
    }

    return 0;
}