Pagini recente » Cod sursa (job #2467943) | Cod sursa (job #183690) | Cod sursa (job #299375) | Cod sursa (job #889797) | Cod sursa (job #1579629)
//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 || mat[k][i] == 0) continue;
for(int j = 1; j<= n; ++j)
{
if(j == k || j == i || mat[k][j] == 0) continue;
if(mat[i][j] > mat[i][k] + mat[k][j] || mat[i][j] == 0) 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;
}