Cod sursa(job #3239844)

Utilizator ChopinFLazar Alexandru ChopinF Data 7 august 2024 23:56:50
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
#include <climits>
using namespace std;
std::string file = "royfloyd";
std::ifstream fin(file + ".in");
std::ofstream fout(file + ".out");
// #define fin std::cin
// #define fout std::cout
long long n;
std::vector<std::vector<long long>> gf, costuri;

int32_t main(int32_t argc, char *argv[]) {
  ios_base::sync_with_stdio(false);
  fin.tie(0);
  fout.tie(0);
  fin >> n;

  gf.resize(n + 1, std::vector<long long>(n + 1, LONG_MAX));
  costuri.resize(n + 1, std::vector<long long>(n + 1, LONG_MAX));

  for (long long i = 1; i <= n; ++i) {
    for (long long j = 1; j <= n; ++j) {
      fin >> gf[i][j];
      if (i == j) {
        gf[i][j] = 0;
      }
      costuri[i][j] = gf[i][j];
    }
  }

  for (long long k = 1; k <= n; ++k) {
    for (long long i = 1; i <= n; ++i) {
      for (long long j = 1; j <= n; ++j) {
        if (costuri[i][k] != INT_MAX && costuri[k][j] != LONG_MAX) {
          costuri[i][j] =
              std::min(costuri[i][j], costuri[i][k] + costuri[k][j]);
        }
      }
    }
  }

  for (long long i = 1; i <= n; ++i) {
    for (long long j = 1; j <= n; ++j) {
      fout << (costuri[i][j] == LONG_MAX ? 0 : costuri[i][j]) << " ";
    }
    fout << "\n";
  }

  return 0;
}