#include #define fi first #define se second using namespace std; typedef pair ii; const int maxN = 30; int N,F[maxN][maxN]; bool check(int x, int y) { if (x < 1 || y < 1 || x > N || y > N || F[x][y] != -1) return 0; return 1; } int BFS(int x, int y) { int u[8],v[8]; u[0] = u[1] = -x; u[2] = u[3] = x; u[4] = u[5] = y; u[6] = u[7] = -y; v[0] = y; v[1] = -y; v[2] = y; v[3] = -y; v[4] = x; v[5] = -x; v[6] = x; v[7] = -x; memset(F,-1,sizeof(F)); queue que; que.push(ii(1,1)); F[1][1] = 0; while (!que.empty()) { int x = que.front().fi, y = que.front().se; que.pop(); for (int i=0; i < 8; i++) { int xx = x+u[i], yy = y+v[i]; if (check(xx,yy)) { F[xx][yy] = F[x][y]+1; que.push(ii(xx,yy)); } } } return F[N][N]; } int main() { cin >> N; for (int i=1; i < N; i++) { for (int j=1; j < N; j++) cout << BFS(i,j) << " "; cout << endl; } }