Pagini recente » Cod sursa (job #2450318) | Cod sursa (job #2450178) | Cod sursa (job #2079706) | Cod sursa (job #2001669) | Cod sursa (job #2198040)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define Inf (1 << 30)
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
void rebuild_path_recursive(int src, int dst, vector<vector<int>> &p) {
if (src == dst) {
cout << src << ' ';
return;
}
rebuild_path_recursive(src, p[src][dst], p);
cout << dst << ' ';
}
int main() {
int n, c;
f >> n;
vector<vector<int>> d(n + 1, vector<int>(n + 1));
// p[i][j] = parintele lui j pe drumul cel mai scurt de la i la j
// vector<vector<int>> p(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
f >> c;
if (c == 0) {
c = Inf;
}
d[i][j] = c;
// p[i][j] = i;
}
}
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (i != j) {
if (d[i][j] > d[i][k] + d[k][j]) {
// i .... j => i .... k ..... j => p[i][j] = p[k][j]
d[i][j] = d[i][k] + d[k][j];
//p[i][j] = p[k][j];
}
}
}
}
}
//rebuild_path_recursive(5, 2, p);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (d[i][j] == Inf) {
d[i][j] = 0;
}
g << d[i][j] << ' ';
}
g << '\n';
}
return 0;
}