Pagini recente » Cod sursa (job #1997902) | Cod sursa (job #1137270) | Cod sursa (job #1003481) | Cod sursa (job #2066417) | Cod sursa (job #3290515)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
const int Inf = 1e9;
const int nmax = 100;
int N;
int w[nmax][nmax];
int d[nmax][nmax];
void readInput() {
FILE* f = fopen("royfloyd.in", "r");
fscanf(f, "%d", &N);
for (int u = 0; u < N; ++u) {
for (int v = 0; v < N; ++v) {
fscanf(f, "%d", &w[u][v]);
}
}
}
void solve() {
// Initializam matricea drumurilor
for (int u = 0; u < N; ++u) {
for (int v = 0; v < N; ++v) {
if (u == v) {
d[u][v] = 0;
}
else if (w[u][v] > 0) {
d[u][v] = w[u][v];
}
else {
d[u][v] = Inf;
}
}
}
// Rulam Roy-Floyd
for (int k = 0; k < N; ++k) {
for (int u = 0; u < N; ++u) {
for (int v = 0; v < N; ++v) {
if (d[u][k] + d[k][v] < d[u][v]) {
d[u][v] = d[u][k] + d[k][v];
}
}
}
}
// Schimbam valorile egale cu infinit in 0
for (int u = 0; u < N; ++u) {
for (int v = 0; v < N; ++v) {
if (d[u][v] == Inf) {
d[u][v] = 0;
}
}
}
}
void writeOutput() {
FILE* f = fopen("royfloyd.out", "w");
for (int u = 0; u < N; ++u) {
for (int v = 0; v < N; ++v) {
fprintf(f, "%d ", d[u][v]);
}
fprintf(f, "\n");
}
}
int main() {
readInput();
solve();
writeOutput();
}