Cod sursa(job #1176815)

Utilizator hrazvanHarsan Razvan hrazvan Data 26 aprilie 2014 10:58:19
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
#define N_MAX 100
#define INF 15000000
int ma[ N_MAX + 1 ][ N_MAX + 1 ], din[ N_MAX + 1 ][ N_MAX + 1 ];

int main()
{
    FILE *in = fopen ( "royfloyd.in", "r" );
    int n;
    fscanf ( in, "%d", &n );
    int i, j;
    for ( i = 1; i <= n; i++ ){
        for ( j = 1; j <= n; j++ ){
            fscanf ( in, "%d", &din[ i ][ j ] );
            if ( din[ i ][ j ] == 0 )   din[ i ][ j ] = INF;
        }
    }
    fclose ( in );

    FILE *out = fopen ( "royfloyd.out", "w" );
    int ii;
    for ( ii = 1; ii <= n; ii++ ){
        for ( i = 1; i <= n; i++ ){
            for ( j = 1 ; j <= n; j++ ){
                if ( i != j ){
                    if ( din[ i ][ j ] > din[ i ][ ii ] + din[ ii ][ j ] && din[ i ][ i] )    din[ i ][ j ] = din[ i ][ ii ] + din[ ii ][ j ];
                }
            }
        }
    }
    for ( i = 1; i <= n; i++ ){
        for ( j = 1; j <= n; j++ ){
            if ( din[ i ][ j ] == INF ) fprintf ( out, "0 " );
            else  fprintf ( out, "%d ", din[ i ][ j ] );
        }
        fputc ( '\n', out );
    }
    fclose ( out );
    return 0;
}