Pagini recente » Cod sursa (job #515085) | Cod sursa (job #519673) | Cod sursa (job #1159289) | Cod sursa (job #619175) | Cod sursa (job #1173867)
#include <vector>
#include <cstdio>
#include <climits>
using namespace std;
#define ONLINE_JUDGE
typedef vector<int> vi;
typedef vector<vi> vvi;
#ifdef ONLINE_JUDGE
FILE *input = fopen("royfloyd.in", "r");
FILE *output = fopen("royfloyd.out", "w");
#else
FILE *input = fopen("input.txt", "r");
FILE *output = stdout;
#endif
int N;
vvi V;
void solve(vvi &V, int N);
void show(vvi &V, int N);
int main() {
fscanf(input, "%d\n", &N);
V.resize(N, vector<int> (N));
for (auto i = 0; i < N; ++i) {
for (auto j = 0; j < N; ++j) {
fscanf(input, "%d", &V[i][j]);
}
}
// for (auto i = 0; i < N; ++i) {
// for (auto j = 0; j < N; ++j) {
// fprintf(output, "%d ", V[i][j]);
// }
// fprintf(output,"\n");
// }
solve(V, N);
show(V, N);
fclose(input);
fclose(output);
return 0;
}
void show(vvi &V, int N) {
for (auto i = 0; i < N; ++i) {
for (auto j = 0; j < N; ++j) {
fprintf(output, "%d ", V[i][j]);
}
fprintf(output, "\n");
}
}
void solve(vvi &V, int N) {
for (auto k = 0; k < N; ++k) {
for (auto i = 0; i < N; ++i) {
for (auto j = 0; j < N; ++j) {
if (i != j) {
if (V[i][k] && V[k][j] &&
((V[i][k] + V[k][j] < V[i][j]) ||
V[i][j] == 0)) {
V[i][j] = V[i][k] + V[k][j];
}
}
}
}
}
}