Cod sursa(job #2431281)

Utilizator ShayTeodor Matei Shay Data 18 iunie 2019 19:44:02
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <vector>
#include <assert.h>

int main() {
	std::ifstream in("royfloyd.in");
	std::ofstream out("royfloyd.out");
	short n;

	in >> n;
	assert(1 <= n && n <= 100);

	std::vector<std::vector<short>> a(n + 1, std::vector<short>(n + 1));

	for (int i = 1 ; i <= n ; ++i) {
		for (int j = 1 ; j <= n ; ++j) {
			in >> a[i][j];
		}
	}

	for (int k = 1 ; k <= n ; ++k) {
		for (int i = 1 ; i <= n ; ++i) {
			for (int j = 1 ; j <= n ; ++j) {
				if (a[i][k] && a[k][j] && i != j) {
					if (a[i][j]) {
						a[i][j] = std::min(a[i][j], short(a[i][k] + a[k][j]));
					} else {
						a[i][j] = a[i][k] + a[k][j];
					}
				}
			}
		}
	}

	for (int i = 1 ; i <= n ; ++i) {
		for (int j = 1 ; j <= n ; ++j) {
			out << a[i][j] << " ";
		}

		out << '\n';
	}

	return 0;
}