Cod sursa(job #1228389)

Utilizator alexandru92alexandru alexandru92 Data 14 septembrie 2014 01:30:05
Problema Floyd-Warshall/Roy-Floyd Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <array>
#include <limits>
#include <cstdlib>
#include <fstream>

using namespace std;
const int NMAX = 129;
const int oo = numeric_limits<int>::max();
using GraphMatrix = array<array<int, NMAX>, NMAX>;

void read(int& N, GraphMatrix& v) {
  ifstream in{"royfloyd.in"};
  
  in >> N;
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
      in >> v[i][j];
      if (0 == v[i][j]) {
        v[i][j] = oo;
      }
    }
  }
}

void solve(int N, GraphMatrix& v) {
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
      if (i != j) {
        for (int k = 0; k < N; ++k) {
          if (i != k && j != k && v[i][j] > v[i][k] + v[k][j]) {
            v[i][j] = v[i][k] + v[k][j];
          }
        }
      }
    }
  }
}

void output(int N, const GraphMatrix& v) {
  ofstream out { "royfloyd.out" };
  
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
      out << (oo == v[i][j] ? 0 : v[i][j]) << ' ';
    }
    out << '\n';
  }
} 

int main() {
  int N;
  GraphMatrix v;

  read(N, v);
  solve(N, v);
  output(N, v);

  return EXIT_SUCCESS;
}