Pagini recente » Istoria paginii runda/tl/clasament | Cod sursa (job #1683049) | soldiers | Cod sursa (job #1953940) | Cod sursa (job #3136397)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
const int NMAX = 105;
const int INF = 1000000000;
int n;
int G[NMAX][NMAX];
int dist[8][NMAX][NMAX];
void read() {
fin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
fin >> G[i][j];
if (G[i][j] == 0)
G[i][j] = INF;
}
}
void doDp() {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
dist[0][i][j] = G[i][j];
for (int k = 1; (1 << (k - 1)) < n; k++) {
for (int x = 1; x <= n; x++)
for (int y = 1; y <= n; y++) {
dist[k][x][y] = dist[k - 1][x][y];
for (int z = 1; z <= n; z++)
dist[k][x][y] = min(dist[k][x][y], (dist[k - 1][x][z] + dist[k - 1][z][y]));
}
}
}
int main() {
read();
doDp();
int log = 0;
while ((1 << log) < n)
log++;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == j || dist[log][i][j] >= INF)
fout << 0 << " ";
else
fout << dist[log][i][j] << " ";
}
fout << "\n";
}
return 0;
}