Cod sursa(job #144395)

Utilizator TabaraTabara Mihai Tabara Data 27 februarie 2008 16:02:55
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>

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

int A[NMAX][NMAX];
int N;

int main()
{
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );

    int i, j, k;
    scanf( "%d", &N );    
    for ( i = 1; i <= N; ++i )
        for ( j = 1; j <= N; ++j )
            scanf( "%d", &A[i][j] );
            
    for ( k = 1; k <= N; ++k )
        for ( i = 1; i <= N; ++i )
            for ( j = 1; j <= N; ++j )
            if ( i != j )
            {
                if (  A[i][k] && A[k][j] && ((!A[i][j]) || (A[i][j] > A[i][k] + A[k][j])) ) 
                   A[i][j] = A[i][k] + A[k][j];                
            }
    for ( i = 1; i <= N; ++i )
    {
        for ( j = 1; j <= N; ++j )
            printf( "%d ", A[i][j] );
        printf( "\n" );
    }
    return 0;
}