Cod sursa(job #1561026)

Utilizator alexandru92alexandru alexandru92 Data 3 ianuarie 2016 16:31:30
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <array>
#include <limits>
#include <iterator>
#include <algorithm>

const int NMAX = 111;
const int INF  = std::numeric_limits<int>::max() >> 1;

int main() {
    int N;
    std::array<std::array<int, NMAX>, NMAX> G;
    std::ifstream in{"royfloyd.in"};
    std::ofstream out{"royfloyd.out"};

    in >> N;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j) {
            in >> G[i][j];
            G[i][j] = 0 == G[i][j] ? INF : G[i][j];
        }
    }

    for (int k = 0; k < N; ++k) {
        for (int i = 0; i < N; ++i) {
            if (k == i) continue;
            for (int j = 0; j < N; ++j) {
                if (k == j || i == j) continue;
                if (G[i][j] > G[i][k] + G[k][j]) {
                    G[i][j] = G[i][k] + G[k][j];
                }
            }
        }
    }
    for (int i = 0; i < N; ++i) {
        std::replace(G[i].begin(), G[i].begin() + N, INF, 0);
        std::copy(G[i].begin(), G[i].begin() + N, std::ostream_iterator<int>{out, " "});
        out << "\n";
    }

    return 0;
}