Cod sursa(job #1117564)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 23 februarie 2014 17:38:40
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#define N_MAX 100

int N, p[ N_MAX + 1 ][ N_MAX + 1 ];

int main( ) {
    FILE * fin, * fout;
    fin = fopen( "royfloyd.in", "r" );
    fout = fopen( "royfloyd.out", "w" );

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

    int i, j, k;
    for( i = 1; i <= N; i ++ ) {
        for( j = 1; j <= N; j ++ ) {
            fscanf( fin, "%d", &p[ i ][ j ] );
        }
    }

    for( k = 1; k <= N; k ++ ) {
        for( i = 1; i <= N; i ++ ) {
            for( j = 1; j <= N; j ++ ) {
                if( p[ i ][ k ] && p[ k ][ j ] && ( p[ i ][ k ] + p[ k ][ j ] < p[ i ][ j ] || !p[ i ][ j ] ) && i != j ) {
                    p[ i ][ j ] = p[ i ][ k ] + p[ k ][ j ];
                }
            }
        }
    }

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

    fclose( fin );
    fclose( fout );
}