# curling 2.0-poj3009
### 大哥鼎力推荐的最佳区分DFS和BFS的题目,供瞻仰
> 题目描述:冰球游戏,在如下的棋盘中,指定一个起点S、一个终点G,问最少需要多少次操作能使得冰球从S运动到G。冰球的运动遵循如下原则:
> * 只能沿XY方向运动,不能沿斜线
> * 冰球可以被移动的前提是下一个位置不能是block
> * 冰球在某个方向上会保持运动除非出现一下三种情况:遇到block,冰球撞击后block消失;出边界;到达目标点G。
> * 操作数不能超过10次
![pic1](http://poj.org/images/3009_1.gif)
具体样例如下(a)为运动路线,(b)为运动后block的状态
![pic2](http://poj.org/images/3009_3.gif)
> 输入:w,h(w为列数,h为行数)
> hxw的矩阵,矩阵值有三种:
> * 0 空
> * 1 block
> * 2 起点
> * 3 终点
> 输出:最小操作数使得冰球从S到G
### 解题思路:
找最短路径最自然的想法是用BFS,但用BFS解此题,最大的问题在于**block会消失**,这个条件会导致当并行计算多个路径时,每个路径对应的棋盘状态不同,也即BFS对应的每个需要入队列的状态都需要保
### 大哥鼎力推荐的最佳区分DFS和BFS的题目,供瞻仰
> 题目描述:冰球游戏,在如下的棋盘中,指定一个起点S、一个终点G,问最少需要多少次操作能使得冰球从S运动到G。冰球的运动遵循如下原则:
> * 只能沿XY方向运动,不能沿斜线
> * 冰球可以被移动的前提是下一个位置不能是block
> * 冰球在某个方向上会保持运动除非出现一下三种情况:遇到block,冰球撞击后block消失;出边界;到达目标点G。
> * 操作数不能超过10次
![pic1](http://poj.org/images/3009_1.gif)
具体样例如下(a)为运动路线,(b)为运动后block的状态
![pic2](http://poj.org/images/3009_3.gif)
> 输入:w,h(w为列数,h为行数)
> hxw的矩阵,矩阵值有三种:
> * 0 空
> * 1 block
> * 2 起点
> * 3 终点
> 输出:最小操作数使得冰球从S到G
### 解题思路:
找最短路径最自然的想法是用BFS,但用BFS解此题,最大的问题在于**block会消失**,这个条件会导致当并行计算多个路径时,每个路径对应的棋盘状态不同,也即BFS对应的每个需要入队列的状态都需要保