Cod sursa(job #1160606)

Utilizator cbanu96Banu Cristian cbanu96 Data 30 martie 2014 17:44:54
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>

using namespace std;

#define FILEIN "royfloyd.in"
#define FILEOUT "royfloyd.out"
#define NMAX 105

int RF[NMAX][NMAX];
int N;

int main() {
    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "w", stdout);

    scanf("%d", &N);
    for ( int i = 1; i <= N; i++ ) {
        for ( int j = 1; j <= N; j++ ) {
            scanf("%d", &RF[i][j]);
        }
    }

    for ( int k = 1; k <= N; k++ ) {
        for ( int i = 1; i <= N; i++ ) {
            for ( int j = 1; j <= N; j++ ) {
                if ( i != j ) {
                    if (!RF[i][k] || !RF[k][j])
                        continue;

                    if (!RF[i][j])
                        RF[i][j] = RF[i][k] + RF[k][j];
                    else if (RF[i][k] + RF[k][j] < RF[i][j])
                        RF[i][j] = RF[i][k] + RF[k][j];
                }
            }
        }
    }

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