Cod sursa(job #3138977)

Utilizator NightCrawler92Alexandru Stefanica NightCrawler92 Data 23 iunie 2023 19:30:51
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <vector>
#include <limits>

int main() {
  std::ifstream in{"royfloyd.in"};

  int N;
  std::vector<std::vector<int>> dp;
  constexpr int oo =  std::numeric_limits<int>::max();
  
  in >> N;
  dp.resize(N);
  for (int i = 0; i < N; ++i) {
     dp[i].reserve(N);
     for(int j = 0; j < N; ++j) {
         in >> dp[i][j];
         if (dp[i][j] == 0) {
            dp[i][j] = oo;
         }
     }
  }

  for(int k = 0; k < N; ++k) {
    for (int i = 0; i < N; ++i) {
       if (dp[i][k] != oo) {
         for (int j = 0; j < N; ++j) {
             if (i != j &&  dp[k][j] != oo) {
                dp[i][j] = std::min(dp[i][j], dp[i][k] + dp[k][j]);
             }
         }
       }
    }
  }

  std::ofstream out{"royfloyd.out"};


  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < N; ++j) {
        if (dp[i][j] ==  oo) {
           out << "0 ";
        } else {
           out << dp[i][j] << ' ';
        }
    }
    out << '\n';
  }

  return 0;
}