Cod sursa(job #1176683)

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

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

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