Cod sursa(job #1579623)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 24 ianuarie 2016 21:53:15
Problema Floyd-Warshall/Roy-Floyd Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
//Problema Royfloyd - InfoArena ( http://www.infoarena.ro/problema/royfloyd )
#include <cstdio>

#define in "royfloyd.in"
#define out "royfloyd.out"
#define NMAX 107
#define DIM 100007

using namespace std;
int n, mat[NMAX][NMAX], poz;
char buff[DIM];

inline void goNext()
{
	++poz;
	if(poz == DIM)
	{
		poz = 0;
		fread(buff, 1, DIM, stdin);
	}
}
inline void citeste(int &nr)
{
	nr = 0;
	while(buff[poz] < '0' || buff[poz] > '9') goNext();
	while(buff[poz] <= '9' && buff[poz] >= '0')
	{
		nr = nr * 10 + buff[poz] - '0';
		goNext();
	}
}

inline void citire()
{
	fread(buff, 1, DIM, stdin);
	citeste(n);
	for(int i = 1; i<= n; ++i)
	{
		for(int j = 1; j<= n; ++j)
		{
			citeste(mat[i][j]);
		}
	}
}
inline void build()
{
	for(int k = 1; k<= n; ++k)
	{
		for(int i = 1; i<= n; ++i)
		{
			if(i == k) continue;
			for(int j = 1; j<= n; ++j)
			{
				if(j == k || j == i) continue;
				if(mat[i][j] > mat[i][k] + mat[k][j]) mat[i][j] = mat[i][k] + mat[k][j]; 
			}
		}
	}
}
inline void afisare()
{
	for(int i = 1; i<= n; ++i)
	{
		for(int j = 1; j<= n; ++j)
		{
			printf("%d ", mat[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	freopen(in, "r", stdin);
	freopen(out, "w", stdout);
	citire();
	build();
	afisare();
	return 0;
}