Cod sursa(job #2611523)

Utilizator cristi1616Olaru Cristian cristi1616 Data 7 mai 2020 00:02:10
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
#define NMAX 109
#define oo (1 << 20)

using namespace std;

class Task {
public:
  void solve() {
    read_input();
    get_result();
    print_output();
  }

private:
  int n, m;
  int d[NMAX][NMAX];
  
  void read_input() {
    cin >> n;
    for (int x = 1; x <= n; ++x) {
      for (int y = 1; y <= n; ++y) {
        int c;
        cin >> c;
        if (c == 0) {
          c = oo;
        }
        d[x][y] = c;
      } 
    }
  }

  void get_result() { RoyFloyd(); }

  void RoyFloyd() {
    for (int k = 1; k <= n; ++k) {
      for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
          if (i != j && d[i][k] + d[k][j] < d[i][j]) {
            d[i][j] = d[i][k] + d[k][j];
          }
        }
      }
    }
  }

  void print_output() {
    for (int i = 1; i <= n; ++i) {
      for (int j = 1; j <= n; ++j) {
        if (d[i][j] == oo) {
          d[i][j] = 0;
        }
        cout << d[i][j] << " ";
      }
      cout << "\n";
    }
  }
};

int main() {
  assert(freopen("royfloyd.in", "r", stdin) != NULL);
  assert(freopen("royfloyd.out", "w", stdout) != NULL);
  Task *task = new Task();
  task->solve();
  delete task;
  return 0;
}