Cod sursa(job #2920245)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 23 august 2022 11:26:45
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#define maxs(a, b) a = (a > b) ? a : b
#define mins(a, b) a = (a < b) ? a : b

#define all(a) a.begin(), a.end()
#define rng(a, i, j) a.begin() + i, a.begin() + j

#define aall(a, n) a + 1, a + 1 + n
#define arng(a, i, j) a + i, a + j

#define pb push_back
#define ins insert
#define sz(a) (int)a.size()

#define r inFile
#define w outFile

#include <fstream>
#include <iostream>

const int NMAX = 1e2;

int adj[1 + NMAX][1 + NMAX];

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

  int n;
  r >> n;

  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      r >> adj[i][j];
    }
  }

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

  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
      w << adj[i][j] << ' ';
    }
    w << '\n';
  }

  return 0;
}