Cod sursa(job #2857065)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 24 februarie 2022 20:20:45
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb

#include <bits/stdc++.h>

#define MIN(a, b) (((a) < (b)) ? (a) : (b))

int ans[105][105];
int n;

void RoyFloyd() {
    register int i, j, k;
    for (k = 1; k <= n; ++k) {
        for (i = 1; i <= n; ++i) {
            for (j = 1; j <= n; ++j) {
                if (ans[i][j] == 0 && ans[i][k] && ans[k][j] && i != j) {
                    ans[i][j] = ans[i][k] + ans[k][j];
                    continue;
                }
                if (ans[i][k] && ans[k][j] && i != j) {
                    ans[i][j] = MIN(ans[i][j], ans[i][k] + ans[k][j]);
                }
            }
        }
    }
}

int main() {
    freopen("royfloyd.in", "r", stdin);
    freopen("royfloyd.out", "w", stdout);
    scanf("%d", &n);
    register int i, j;
    for (i = 1; i <= n; ++i) {
        for (j = 1; j <= n; ++j) {
            scanf("%d", &ans[i][j]);
        }
    }
    RoyFloyd();
    for (i = 1; i <= n; ++i) {
        for (j = 1; j <= n; ++j) {
            printf("%d ", ans[i][j]);
        }
        printf("\n");
    }
    return 0;
}