Cod sursa(job #1238041)

Utilizator alexandru92alexandru alexandru92 Data 5 octombrie 2014 15:10:21
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <array>
#include <limits>
#include <fstream>
#include <cstdlib>

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

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

  in >> N;
  for (int i = 1; i <= N; ++i) {
    for (int j = 1; j <= N; ++j) {
      in >> dp[i][j];
      if (0 == dp[i][j]) {
        dp[i][j] = oo;
      }
    }
  }

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

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

  return EXIT_SUCCESS;
}