Cod sursa(job #2887668)

Utilizator victorzarzuZarzu Victor victorzarzu Data 9 aprilie 2022 23:05:06
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <vector>
#include <string>
#include <fstream>

#define oo 0x3f3f3f3f

using std::vector;

class RoyFloyd {
private:
	int n;
	vector<int>* graf;
	std::string input_file;
	std::string output_file;

	void read() {
		std::ifstream in(input_file);

		in >> n;
		graf = new vector<int>[n];
		for (int i = 0; i < n; ++i) {
			graf[i].resize(n);
		}

		for (int i = 0; i < n; ++i) {
			for (int j = 0; j < n; ++j) {
				in >> graf[i][j];
				if (graf[i][j] == 0) {
					graf[i][j] = oo;
				}
			}
		}

		in.close();
	}

	void solve() {
		read();

		for (int k = 0; k < n; ++k) {
			for (int i = 0; i < n; ++i) {
				for (int j = 0; j < n; ++j) {
					if (i != j) {
						graf[i][j] = std::min(graf[i][j], graf[i][k] + graf[k][j]);
					}
				}
			}
		}
	}

public:
	RoyFloyd(const std::string& input, const std::string& output) : input_file{ input }, output_file{ output }{};

	~RoyFloyd() {
		delete[] graf;
	}

	void print() {
		solve();
		std::ofstream out(output_file);

		for (int i = 0; i < n; ++i, out << '\n') {
			for (int j = 0; j < n; ++j) {
				if (graf[i][j] == oo) {
					out << 0 << " ";
				}
				else {
					out << graf[i][j] << " ";
				}
			}
		}

		out.close();
	}
};

int main() {
	RoyFloyd r = RoyFloyd{ "royfloyd.in", "royfloyd.out" };
	r.print();

	return 0;
}