Cod sursa(job #1128135)

Utilizator superman_01Avramescu Cristian superman_01 Data 27 februarie 2014 15:34:07
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>

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

using namespace std;

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

int Cost[NMAX][NMAX] , Sol[NMAX][NMAX];
int N;

int main ( void )
{
	int i , j , k ;
	in >> N ;
	for ( i = 1 ; i <= N ; ++i )
		for ( j = 1 ; j <= N ; ++j )
			in >> Cost[i][j] , ( Cost[i][j] == 0 ? Cost[i][j] = INF : Cost[i][j] = Cost[i][j] );
	for ( k = 1 ; k <= N ; ++k )
		for ( i = 1 ; i <= N ; ++i )
		    for ( j = 1 ; j  <= N ; ++j )
				if ( Cost[i][k] and Cost[k][j] and k!= i and k!=j  and i !=j )
			Cost[i][j] = get_min ( Cost[i][j] , Cost[i][k] + Cost[k][j] );
	for ( i = 1 ; i <= N ; ++i , out << "\n" )
		for ( j = 1 ; j <= N ; ++j )
			out << ( Cost[i][j] == INF ? Cost[i][j] = 0 : Cost[i][j] = Cost[i][j] ) << " ";
	in.close();
	out.close();
	return 0 ;
}