Pagini recente » Cod sursa (job #926978) | Cod sursa (job #2845429) | Cod sursa (job #1445255) | Cod sursa (job #1703706) | Cod sursa (job #2436298)
#include <stdio.h>
#include <vector>
#include <assert.h>
inline void print(int n) {
char snum[65];
int i = 0;
do {
snum[i++] = n % 10 + '0';
n /= 10;
} while (n);
--i;
while (i >= 0) {
putchar(snum[i--]);
}
putchar(' ');
}
inline int read() {
int n = 0;
char c = getchar_unlocked();
while (!('0' <= c && c <= '9')) {
c = getchar_unlocked();
}
while ('0' <= c && c <= '9') {
n = (n << 3) + (n << 1) + c - '0';
c = getchar_unlocked();
}
return n;
}
int main() {
freopen("royfloyd.in", "r", stdin);
freopen("royfloyd.out", "w", stdout);
short n;
n = read();
assert(1 <= n && n <= 100);
std::vector<std::vector<short>> a(n + 1, std::vector<short>(n + 1));
for (int i = 1 ; i <= n ; ++i) {
for (int j = 1 ; j <= n ; ++j) {
a[i][j] = read();
}
}
for (int k = 1 ; k <= n ; ++k) {
for (int i = 1 ; i <= n ; ++i) {
for (int j = 1 ; j <= n ; ++j) {
if (a[i][k] && a[k][j] && i != j) {
if (a[i][j]) {
a[i][j] = std::min(a[i][j], short(a[i][k] + a[k][j]));
} else {
a[i][j] = a[i][k] + a[k][j];
}
}
}
}
}
for (int i = 1 ; i <= n ; ++i) {
for (int j = 1 ; j <= n ; ++j) {
print(a[i][j]);
}
putchar('\n');
}
return 0;
}