Cod sursa(job #1314432)

Utilizator superman_01Avramescu Cristian superman_01 Data 11 ianuarie 2015 20:46:00
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>

#define NMAX 105
#define INF 0x3f3f3f3f
#define get_min(a,b) ((a)<(b)?(a):(b))

using namespace std;

ifstream in ("royfloyd.in");
ofstream out ( "royfloyd.out" );

int Graph[NMAX][NMAX];
int N , M ;
int Sol[NMAX][NMAX];

void Read( void ){

   int i , j ;
   in >> N ;
   for ( i = 1 ; i <= N ; ++i )
        for ( j = 1 ; j <= N ; ++j )
            in >> Graph[i][j] , Sol[i][j] = ( Graph[i][j] != 0 ? Graph[i][j] : INF );
}

void RoyFloyd ( void ) {
    int i , j , k ;
    for ( i = 1 ; i <= N ; ++i )
        for ( k =1 ; k <= N ; ++k )
           for ( j = 1 ; j <= N ; ++j )
                   if ( Sol[k][i] and Sol[i][j] and i !=j and k!= j and k != i  )
                   Sol[k][j] = get_min( Sol[k][j] , Sol[k][i]+Sol[i][j]);
}
void Write ( void )
{
   int i , j ;
   for ( i = 1 ; i <= N ; ++i ){
      for ( j = 1 ; j <= N ; ++j )
         out << ( Sol[i][j] != INF ? Sol[i][j] : 0 ) << " ";
   out << "\n";
         }
}

int main(){

   Read();
   RoyFloyd();
   Write();
   return 0;
}