Cod sursa(job #1437831)

Utilizator BLz0rDospra Cristian BLz0r Data 18 mai 2015 18:20:43
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
using namespace std;

#define Nmax 102

FILE *f = fopen ( "royfloyd.in", "r" );
FILE *g = fopen ( "royfloyd.out", "w" );

int D[Nmax][Nmax];

bool conditie ( int i, int j, int k ){
     if ( i != j && i != k && j != k &&
          D[i][k] && D[k][j] &&
        ( !D[i][j] || D[i][j] > D[i][k] + D[k][j] ) )
            return 1;
     return 0;
}

int main(){

    int N;

    fscanf ( f, "%d", &N );

    for ( int i = 1; i <= N; ++i )
        for ( int j = 1; j <= N; ++j )
            fscanf ( f, "%d", &D[i][j] );

    for ( int k = 1; k <= N; ++k )
        for ( int i = 1; i <= N; ++i )
            for ( int j = 1; j <= N; ++j )
                if ( conditie ( i, j, k ) )
                    D[i][j] = D[i][k] + D[k][j];

    for ( int i = 1; i <= N; ++i ){
        for ( int j = 1; j <= N; ++j ){
            fprintf ( g, "%d ", D[i][j] );
        }
        fprintf ( g, "\n" );
    }

    return 0;
}