Pagini recente » Istoria paginii template/inscriere | Cod sursa (job #2853089) | Istoria paginii runda/11 | Cod sursa (job #1092259) | Cod sursa (job #3138977)
#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;
}