Cod sursa(job #2207366)

Utilizator petretiberiu46Petre Tiberiu petretiberiu46 Data 25 mai 2018 15:57:51
Problema Floyd-Warshall/Roy-Floyd Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");

int n;
vector<vector<int>> graf;

void citeste() {
	fin >> n; int x;
	for (int i = 0; i < n; i++) {
		vector<int>* row = new vector<int>;
		for (int j = 0; j < n; j++) {
			fin >> x;
			if (i != j && x == 0) x = INT32_MAX;
			row->push_back(x);
		}
		graf.push_back(*row);
	}
}

void afisare(ostream& out = std::cout) {
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++) {
			if (i!=j && graf[i][j] == INT32_MAX) out << 0 << " ";
			else out << graf[i][j] << " ";
		}
		out << endl;
	}
}

void royfloyd() {
	for (int k = 0; k < n; k++) {
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
				if (graf[i][j] > graf[i][k] + graf[k][j])
					graf[i][j] = graf[i][k] + graf[k][j];
	}
}

int main() {
	citeste();
	royfloyd();
	afisare(fout);
	return 0;
}