4432: 冰壶游戏

Memory Limit:128 MB Time Limit:1 S
Judge Style:Text Compare Creator:
Submit:11 Solved:6

Description

在行星MM-21,冰壶(冰上溜石游戏)变得非常流行,但他们的规则和我们的有些不同,这一游戏是在一个用正方形方格划分的冰棋盘上进行。他们只用一块石头。这一游戏的目标是将石头从开始位置用最少的移动次数移到目标位置。

如图给出了一个游戏的实例。一些正方形方格被阻塞了,存在两个特别的方格,即开始位置(S)和目标位置(G),这两个方格不会被阻塞。(这两个方格不会在同一位置)一旦石头开始移动,它就会一直向前,直到它撞上一块阻塞物。为了使石头移到目标位置,在石头停止在阻塞物前的时候,你要再次推动它。

石头的移动遵循以下规则:
1、在开始的时候,石头在开始位置。
2、石头的移动受限于X轴,Y轴方向,禁止沿对角线移动。
3、当石头停滞的时候,你可以推动它让它移动。只要它没有没阻塞,你可以向任何方向推动它(如图(a))。
一旦推动了石头,石头就向前走同样的方向,直到出现下列情况之一:
1、石头遇上了阻塞(如图(b),(c))。 石头停在阻塞方块前,阻塞物消失。
2、石头走出了棋盘。 游戏结束,失败。
3、石头到达到了目标方格。 石头停止那里,游戏成功结束。
在游戏中,你不能推动石头10次以上。如果在10次以内石头没有到达目标位置,游戏结束,失败。
根据这一规则,我们想知道是否在开始位置的石头可以到达到目标位置,如果可以到达,就要给出最低的推动次数。

实例如图所示,将石头从开始位置移动到目标位置要推动石头4次,石头运动的路线如图(a)所示。请注意当石头到达目标位置的时候,棋盘图结构变化如图(b)所示。

Input

输入是一个数据集合的序列,在输入结束是包含用空格分开的两个零的一行。数据集合的数目从未超过100。
每个数据集合的格式如下:
冰棋盘的宽度w和高度h
冰棋盘的第1行
...
冰棋盘的第h行

冰棋盘的宽度和高度满足: 2≤w≤20,1≤h≤20。
每行包含w个用空格分开的十进制数。这一数字描述相应的方块的状态。
0 空方块
1 阻塞
2 开始位置
3 目标位置
图1的数据集合如下:
6 6
1 0 0 2 1 0
1 1 0 0 0 0
0 0 0 0 0 3
0 0 0 0 0 0
1 0 0 0 0 1
0 1 1 1 1 1

Output

对于每个数据集合,打印一行,给出一个十进制整数,表示从开始位置到目标位置的路线的移动的最少次数。如果没有这样的路线,输出-1。除了这个数字,输出行没有其他的任何字符。

Sample Input Copy

2 1
3 2
6 6
1 0 0 2 1 0
1 1 0 0 0 0
0 0 0 0 0 3
0 0 0 0 0 0
1 0 0 0 0 1
0 1 1 1 1 1
6 1
1 1 2 1 1 3
6 1
1 0 2 1 1 3
12 1
2 0 1 1 1 1 1 1 1 1 1 3
13 1
2 0 1 1 1 1 1 1 1 1 1 1 3
0 0

Sample Output Copy

1
4
-1
4
10
-1

加入题单

上一题 下一题 算法标签: