Cod sursa(job #2312119)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 4 ianuarie 2019 12:09:49
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 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; }