Cod sursa(job #389247)

Utilizator ErgoVicol Sergiu Constantin Ergo Data 1 februarie 2010 12:45:30
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <limits>

#define NMAX 128
#define mp matriceaPonderilor


using namespace std;

int matriceaPonderilor[NMAX][NMAX], N;

void Citire(void)
{
	ifstream fin("royfloyd.in");
	
	int i, j;
	fin >>N;
	for (i = 1; i <= N; i++)
		for (j = 1; j <= N; j++)
			fin >>matriceaPonderilor[i][j];
		
	fin.close();
}

void RoyFloyd(void)
{
	int k, i, j;
	
	for (k = 1; k <= N; k++)
		for (i = 1; i <= N; i++)
			for (j = 1; j <= N; j++)
				if (mp[i][k] && mp[k][j] && (mp[i][j] > mp[i][k] + mp[k][j] || !mp[i][j]) && i != j) mp[i][j] = mp[i][k] + mp[k][j];
}

void Afisare(void)
{
	ofstream fout("royfloyd.out");
	
	int i, j;
	
	for (i = 1; i <= N; i++)
	{
		for (j = 1; j <= N; j++)
			fout <<mp[i][j] <<' ';
		fout <<'\n';
	}
	fout.close();
}

int main()
{
	Citire();
	RoyFloyd();
	Afisare();

	return 0;
}