Pagini recente » Cod sursa (job #15456) | Cod sursa (job #449958) | Cod sursa (job #2196938) | Cod sursa (job #502072) | Cod sursa (job #2223625)
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
const string IN_FILE = "royfloyd.in";
const string OUT_FILE = "royfloyd.out";
const int INF = 0x3f3f3f3f;
vector<vector<int>> royFloyd(const vector<vector<int>>& costs) {
const int n = int(costs.size());
auto distances = vector<vector<int>>(costs);
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
distances[i][j] =
min(distances[i][j], distances[i][k] + distances[k][j]);
}
}
}
return distances;
}
vector<vector<int>> readInput() {
ifstream in(IN_FILE);
int n;
in >> n;
auto costs = vector<vector<int>>(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
in >> costs[i][j];
costs[i][j] = costs[i][j] == 0 ? INF : costs[i][j];
}
costs[i][i] = 0;
}
in.close();
return costs;
}
void writeOutput(const vector<vector<int>>& distances) {
ofstream out(OUT_FILE);
const int n = int(distances.size());
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
out << (distances[i][j] == INF ? 0 : distances[i][j]);
out << (j + 1 < n ? " " : "\n");
}
}
out.close();
}
int main() {
const auto costs = readInput();
const auto distances = royFloyd(costs);
writeOutput(distances);
return 0;
}