#lydlx02x0904. 骑士精神
骑士精神

骑士精神
题目描述
在一个 的棋盘上有 个白色的骑士和 个黑色的骑士,且有一个空位。
在任何时候一个骑士都能按照骑士的走法移动到空位上。
给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘?为了体现出骑士精神,他们必须以最少的步数完成任务。
骑士的走法
骑士可以走到和它横坐标相差为 ,纵坐标相差为 或者 横坐标相差为 ,纵坐标相差为 的格子。
即国际象棋中骑士的走法(L形移动):
- 先走2格直线,再走1格直角
- 或先走1格直线,再走2格直角
目标棋盘
目标棋盘的状态固定为:
11111
01111
00*11
00001
00000
用数字表示:
1表示黑色骑士0表示白色骑士*表示空位
输入格式
第一行有一个正整数 ,表示一共有 组数据。
接下来有 个 的矩阵,每个矩阵:
0表示白色骑士1表示黑色骑士*表示空位
注意: 矩阵按行输入,每组数据是一个 的棋盘。两组数据之间没有空行。
输出格式
每组数据输出占一行。
如果能在 步以内(包括 步)到达目标状态,则输出步数,否则输出 。
数据范围
输入样例
2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100
输出样例
7
-1
样例解释
第一组数据
初始棋盘:
1 0 1 1 0
0 1 * 1 1
1 0 1 1 1
0 1 0 0 1
0 0 0 0 0
目标棋盘:
1 1 1 1 1
0 1 1 1 1
0 0 * 1 1
0 0 0 0 1
0 0 0 0 0
可以在 步内完成转换,因此输出 7。
第二组数据
初始棋盘:
0 1 0 1 1
1 1 0 * 1
0 1 1 1 0
0 1 0 1 0
0 0 1 0 0
无法在 步内转换到目标棋盘,因此输出 -1。
约束条件
- 棋盘大小为 ,固定不变
- 骑士总数固定:12个白色骑士(用0表示),12个黑色骑士(用1表示),1个空位(用*表示)
- 只需要移动骑士到空位,不需要考虑骑士的"吃子"规则
- 最大步数限制:15步
- 如果超过15步才能到达目标状态,则视为无法完成
时空限制
- 时间限制:1秒
- 空间限制:64MB