Cod sursa(job #1713571)

Utilizator S4lexandruAlexandru Stefanica S4lexandru Data 5 iunie 2016 23:05:54
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <array>
#include <limits>
#include <fstream>

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

int main() {
    std::ifstream in{"royfloyd.in"};
    std::ofstream out{"royfloyd.out"};

    int N;
    std::array<std::array<int, NMAX>, NMAX> G;

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

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

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

    for (int i = 1; i <= N; ++i) {
        for (int j = 1; j <= N; ++j) {
            out << (INF == G[i][j] ? 0 : G[i][j]) << " ";
        }
        out << "\n";
    }

    return 0;
}