Cod sursa(job #144633)

Utilizator cos_minBondane Cosmin cos_min Data 27 februarie 2008 20:21:20
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "royfloyd.in"
#define out "royfloyd.out"
#define dim 101

int N;
int A[dim][dim];

inline int Minim(int a, int b) {
       if ( a < b ) return a;
       return b;
}

int main()
{
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d", &N);
    for ( int i = 1; i <= N; i++ )
        for ( int j = 1; j <= N; j++ )
            scanf("%d", &A[i][j]);
    
    for ( int k = 1; k <= N; k++ )
        for ( int i = 1; i <= N; i++ )
            for ( int j = 1; j <= N; j++ )
            {
                if ( i == j ) continue;
                if ( A[i][k] > 0 && A[k][j] > 0 ) 
                {
                   if ( A[i][j] == 0 ) A[i][j] = A[i][k] + A[k][j];
                   else                A[i][j] = Minim( A[i][j], A[i][k] + A[k][j] );
                }   
            }    
    
    for ( int i = 1; i <= N; i++, printf("\n") )
        for ( int j = 1; j <= N; j++ )
            printf("%d ", A[i][j]);
}