Cod sursa(job #2139996)

Utilizator SineMineSzasz Bogdan SineMine Data 22 februarie 2018 22:37:30
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb

/* Algoritmul lui Warshall - determina Inchiderea Tranzitiva
 * Intrare: matricea de adiacenta
 * Iesire:  matricea lanturilor/drumurilor
 */
#include <fstream>
using namespace std;

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

const int MaxN = 101;
bool a[MaxN][MaxN];  // matrice de adiacenta. Algoritmul o transforma in matricea lanturilor
int n;

void ReadGraph();
void Warshall();
void Write();


int main()
{
	ReadGraph();
	Write();
	Warshall();
	Write();

}

void Warshall() // O(n^3)
{
	for (int k = 1; k <= n; ++k)
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= n; ++j)
				if (i != j && a[i][j] == false)
					a[i][j] = a[i][k] && a[k][j];
}

void ReadGraph()
{
	fin >> n;
	int x, y;
	while (fin >> x >> y)
		a[x][y] = a[y][x] = true;
}

void Write()
{
	for (int i = 1; i <= n; i++, fout << '\n')
		for (int j = 1; j <= n; ++j)
			fout << a[i][j] << ' ';

	fout << "\n\n";
}