Cod sursa(job #1555710)

Utilizator cristina_borzaCristina Borza cristina_borza Data 23 decembrie 2015 14:42:11
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cstdio>

using namespace std;

int n , a[105][105];

void read(int &x) {
    char ch;
    int semn = 1;

    while(!isdigit(ch = getchar())) {
        if(ch == '-') {
            semn = -1;
        }

        else {
            semn = 1;
        }
    }

    do{
        x = x * 10 + ch - '0';
    }while(isdigit(ch = getchar()));

    x *= semn;
}

int main() {
    freopen("royfloyd.in" , "r" , stdin);
    freopen("royfloyd.out" , "w" , stdout);

    read(n);

    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= n ; ++j) {
            read(a[i][j]);
        }
    }

    for(int k = 1 ; k <= n ; ++k) {
        for(int i = 1 ; i <= n ; ++i) {
            for(int j = 1 ; j <= n ; ++j) {
                if(a[i][k] != 0 && a[k][j] != 0 && i != j) {
                    if(a[i][j] == 0 || a[i][k] + a[k][j] < a[i][j])
                        a[i][j] = a[i][k] + a[k][j];
                }
            }
        }
    }

    for(int i = 1 ; i <= n ; ++i) {
        for(int j = 1 ; j <= n ; ++j) {
            printf("%d " , a[i][j]);
        }
        printf("\n");
    }
    return 0;
}