Cod sursa(job #2430393)

Utilizator AxellApostolescu Alexandru Axell Data 14 iunie 2019 16:12:44
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

void print(ofstream& out, int size, int **matrix) {
	for (int i = 0 ; i < size ; ++i) {
		for (int j = 0 ; j < size ; ++j) {
			out << matrix[i][j] << " ";
		}
		out << "\n";
	}
}

void floydWarshall(int size, int **matrix) {
	for (int k = 0 ; k < size ; ++k) {
		for (int i = 0 ; i < size ; ++i) {
			for (int j = 0 ; j < size ; ++j) {
				if (matrix[i][k] == 0 || matrix[k][j] == 0 || i == j) {
					continue;
				}
				if (matrix[i][j] > matrix[i][k] + matrix[k][j] ||
					matrix[i][j] == 0) {
					matrix[i][j] = matrix[i][k] + matrix[k][j];
				}
			}
		}
	}
}

int main() {
	ifstream in;
	in.open("royfloyd.in");
	ofstream out;
	out.open("royfloyd.out");
	if (!in || !out) {
		cout << "Error opening files!\n";
		return -1;
	}
	int size;
	in >> size;
	int **matrix;
	matrix = new int*[size];
	for (int i = 0 ; i < size ; ++i) {
		matrix[i] = new int[size];
	}
	for (int i = 0 ; i < size ; ++i) {
		for (int j = 0 ; j < size ; ++j) {
			in >> matrix[i][j];
		}
	}
	floydWarshall(size, matrix);
	print(out, size, matrix);

	for (int i = 0 ; i < size ; ++i) {
		delete[] matrix[i];
	}
	delete[] matrix;

	in.close();
	out.close();
	return 0;
}