Cod sursa(job #1314424)

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

#define NMAX 105
#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];
}

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 k != j and i != 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] << " ";
   out << "\n";
         }
}

int main(){

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