双向广度优先搜索
题目
地址:http://acm.hdu.edu.cn/showproblem.php?pid=3085
题意
给出一个n×m的迷宫,迷宫里有些地方是墙,有些地方是空地,迷宫里还有两只鬼,鬼可以分身,以每秒两步的速度向附近扩散,而且鬼可以穿墙。erriyue和他的女朋友在迷宫里面,erriyue每秒钟可以走3步,他的女朋友每秒钟可以走一步。问erriyue能否在在鬼抓到他或他女朋友之前,与他女朋友会合,如果可以输出最少需要的时间,否则输出-1。
- 墙用#表示
- 空地用.表示
- 鬼的初始位置用M表示
- erriyue的初始位置用M表示
- erriyue的女朋友初始位置用G表示
解题思路
以erriyue和他女朋友为原点,使用双向广度优先搜索路径,同时使用曼哈顿距离(也就是两个方向上的距离和)来判断会不会被鬼追上。双向的广度优先搜索相当单向的耗时少一点,用曼哈顿距离就可以不用把鬼加到队列里了,省了空间。
代码
1 |
|