Pagini recente » Cod sursa (job #2081067) | Cod sursa (job #737912) | Cod sursa (job #48707) | Cod sursa (job #2448524) | Cod sursa (job #1561026)
#include <fstream>
#include <array>
#include <limits>
#include <iterator>
#include <algorithm>
const int NMAX = 111;
const int INF = std::numeric_limits<int>::max() >> 1;
int main() {
int N;
std::array<std::array<int, NMAX>, NMAX> G;
std::ifstream in{"royfloyd.in"};
std::ofstream out{"royfloyd.out"};
in >> N;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
in >> G[i][j];
G[i][j] = 0 == G[i][j] ? INF : G[i][j];
}
}
for (int k = 0; k < N; ++k) {
for (int i = 0; i < N; ++i) {
if (k == i) continue;
for (int j = 0; j < N; ++j) {
if (k == j || i == j) continue;
if (G[i][j] > G[i][k] + G[k][j]) {
G[i][j] = G[i][k] + G[k][j];
}
}
}
}
for (int i = 0; i < N; ++i) {
std::replace(G[i].begin(), G[i].begin() + N, INF, 0);
std::copy(G[i].begin(), G[i].begin() + N, std::ostream_iterator<int>{out, " "});
out << "\n";
}
return 0;
}