Cod sursa(job #1404184)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 27 martie 2015 21:08:25
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <algorithm>

const int MAX_N(101);

int n;
int Graph [MAX_N] [MAX_N];
int Dp [MAX_N] [MAX_N];

inline void Read (void)
{
	std::ifstream input("royfloyd.in");
	input >> n;
	for (int i(1) ; i <= n ; ++i)
		for (int j(1) ; j <= n ; ++j)
			input >> Graph[i][j];
	input.close();
}

inline void Print (void)
{
	std::ofstream output("royfloyd.out");
	for (int i(1) ; i <= n ; ++i)
	{
		for (int j(1); j <= n ; ++j)
			output << Dp[i][j] << ' ' ;
		output.put('\n');
	}
	output.close();
}

inline void Dynamic (void)
{
	for (int i(1) ; i <= n ; ++i)
		for (int j(1) ; j <= n ; ++j)
			Dp[i][j] = Graph[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 != k && j != k && i != j && Dp[i][k] && Dp[k][j])
						Dp[i][j] = (Dp[i][j] ? std::min(Dp[i][j],Dp[i][k] + Dp[k][j]) : Dp[i][k] + Dp[k][j]);
}

int main (void)
{
	Read();
	Dynamic();
	Print();
	return 0;
}