编程题
### 问题描述 Wiki 的业余爱好就是下象棋,他不仅会下中国象棋,还会下国际象棋。他发现中国象棋和国际象棋虽然都有"马"这个棋子,但走的规则却不太一样。 国际象棋的"马"可以走"日"字,也就是说每一步只可以水平或垂直移动一点,再按对角线方面向左或者右移动(另一种解释,可以先在水平/竖直方向走两格,然后在竖直/水平方向走一格)。另外,马不允许跳出界外,也即必须跳完一步之后仍在棋盘上。如图所示: ![图片描述](https://dn-simplecloud.shiyanlou.com/questions/uid2475380-20230503-1683118500613) 中国象棋的"马"的走法也是走日字,在没有障碍物的情况下,其走法与国际象棋一样。唯一不同的是,如果马走了一格就遇到障碍物,马就不能继续向这个方向前进了(又称为"马脚")。如图所示,左上角的马因为没有障碍物,可以走八个方向,而右下角的马由于正上方有一个其他棋子,因此就不能往上方的两个方向跳了。 ![图片描述](https://dn-simplecloud.shiyanlou.com/questions/uid2475380-20230503-1683118974341) Wiki 想比较一下两种马的差异,他找来了一个 $n$ 行 $m$ 列的大棋盘,行和列都从 $1$ 开始编号。这个棋盘上已经有若干个其他棋子,马在行进的过程中不能走到这些有棋子的格子上。为了方便比较起见,假定所有棋子都在格子内部(本来中国象棋的子是放在交线上的)。Wiki 先在 $a$ 行 $b$ 列放上国际象棋的马,算了一下它到 $c$ 行 $d$ 列最快要几步;又在同样的 $a$ 行 $b$ 列放上中国象棋的马,算了一下它到 $c$ 行 $d$ 列最快要几步。显然,这么手工计算很容易出错,因此 Wiki 想请你帮忙用程序算一下。 ### 输入格式 输入第 $1$ 行包含一个正整数 $T$ ,表示有 $T$ 组输入。 每组数据的第 $1$ 行包含 $7$ 个数 $n,m,k,a,b,c,d$ ,分别表示棋盘的行数,棋盘的列数,其他棋子的个数,起点坐标 $(a,b)$ 和终点坐标 $(c,d)$。 第 $2$ 行有 $2\times k$ 个数,每两个数代表一个其他棋子所在的坐标。 **数据保证不会有多个其他棋子在一个格子中,也保证 $(a,b)$ 和 $(c,d)$ 不会有其他棋子。** ### 输出格式 对于每组输入,输出一行两个数,分别表示国际象棋的马和中国象棋的马从起点坐标到终点坐标最少需要走几步。若不可能到达,则输出 $-1$。 ### 样例输入 ``` 2 10 10 1 5 5 5 5 1 1 2 3 1 1 1 2 3 1 2 ``` ### 样例输出 ``` 0 0 1 -1 ``` ### **说明/提示** 对于所有评测数据,$1\leq T\leq100,1\leq n,m,a,b,c,d\leq 300$。
查看答案
赣ICP备20007335号-2