14068 - 马走日
时间限制 : 1 秒
内存限制 : 128 MB
在国际象棋中,马的移动方式与中国象棋中的马类似,都是走“日”字。但国际象棋中的马没有“蹩腿”的限制,因此它可以向周围 8 个方向任意跳动(只要不超出棋盘边界)。具体来说,马每步可以从一个格子跳到与之水平距离为 1、垂直距离为 2,或者水平距离为 2、垂直距离为 1 的格子上。

现在给定一个 n 行 m 列的棋盘,以及马的起始位置 (x, y)。请你计算马从起始位置出发,到达棋盘上每一个格子所需的最少移动步数。如果某个格子无法到达,则输出 -1。
输入
输入仅一行,包含四个整数 n, m, x, y ,用空格隔开:
- n :棋盘的行数
- m :棋盘的列数
- x :起始行号(1 ≤ x ≤ n)
- y :起始列号(1 ≤ y ≤ m)
输出
输出 n 行,每行包含 m 个整数,依次表示从起点到该格子(第 i 行第 j 列)的最少步数。相邻整数之间用一个空格隔开。如果该格子无法到达,则输出 -1。
样例
输入
3 3 3 1
输出
2 1 4 3 -1 1 0 3 2
提示
样例说明
棋盘为 3 \times 3 ,起点位于第 3 行第 1 列(即左下角)。马从起点出发,一步可以跳到 (1,2)、(2,3) 等位置,经过 BFS 计算得到各格子的最短步数如输出所示。注意 (2,2) 无法到达,因此输出 -1。
数据范围与约定
- 1 \le n, m \le 1000
- 1 \le x \le n , 1 \le y \le m