#AT0176. 马踏棋盘

马踏棋盘

题目描述

在象棋中,马的移动规则是通过走“日”字型的路径。

将象棋棋盘用坐标表示,如下图中。马在 (2,4)(2,4) 位置,那么马可以跳到 (4,5)(3,6)(1,6)(4,5)、(3,6)、(1,6)88 位置。当然,要保证马不能跳到棋盘的外面。

image

显然传统的规则下,马的跳跃距离为 5\sqrt 5,但现在小 Z 对这一规则进行了改进。

小 Z 的改进是马每次跳跃的距离必须是一个整数,且不再限制为 5\sqrt 5。例如,从(00)(0,0) 点可以跳向 (3,4)(3, 4)、距离为 55 个单位。请注意,马在跳跃时不能直线前进,必须采用斜线路径,当然马仍然只能从整数点,跳到整数点。

现在给定,棋盘的大小,具体地,棋盘范围是从 (0,0)(0,0) 点到 (n1,n1)(n-1,n-1) 的点。你的任务是给定棋盘的大小和马的初始坐标,计算出马跳到每个点的最小步数。要注意的是,在这个过程中,马始终不能跳到棋盘的外面。

输入格式

输入第一行有三个整数 n,x,yn,x,y,其中 nn 代表棋盘大小,xxyy 代表马的初识坐标为 (x,y)(x,y)

输出格式

一个 nnnn 列的矩阵,其中第 ii 行第 jj 列的整数表示马到达坐标 (i1,j1)(i-1,j - 1) 点最少要走几步。如果不能到达则输出 1−1

样例

5 0 0
0 -1 -1 -1 -1
-1 -1 -1 -1 -1
-1 -1 -1 -1 -1
-1 -1 -1 -1 1
-1 -1 -1 1 -1

数据范围

对于 20%20\% 的测试点,保证 1n101 \leq n\leq 10

对于 50%50\% 的测试点,保证 1n1001 \leq n\leq 100

对于 100%100\% 的测试点,保证 1n3001 \leq n\leq 300,并且保证 0xn1,0yn10\le x \le n - 1, 0 \le y \le n - 1