Cod sursa(job #2773250)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 5 septembrie 2021 20:23:44
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <cmath>

const int MAX_N = 101;

int n;
int dp[MAX_N][MAX_N];

void read()
{
	std::ifstream input("royfloyd.in");
	input >> n;
	for (int row(1); row <= n; ++row) {
		for (int col(1); col <= n; ++col) {
			input >> dp[row][col];
		}
	}
	input.close();
}

void print()
{
	std::ofstream output("royfloyd.out");
	for (int row(1); row <= n; ++row) {
		for (int col(1); col <= n; ++col) {
			output << dp[row][col] << ' ';
		}
		output.put('\n');
	}
	output.close();
}

void royfloyd()
{
	for (int k(1); k <= n; ++k) {
		for (int i(1); i <= n; ++i) {
			for (int j(1); j <= n; ++j) {
				if (dp[i][k] && dp[k][j] && i != j && (!dp[i][j] || dp[i][k] + dp[k][j] < dp[i][j])) {
					dp[i][j] = dp[i][k] + dp[k][j];
				}
			}
		}
	}
}

int main()
{
	read();
	royfloyd();
	print();
	return 0;
}