题目描述:
给定一个大小为N×M的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动到终点。
输入示例:
N=10,M=10('#'表示墙壁,'.'表示通道,'S'和'G'分别表示起点和终点)
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
输出示例:
22
题目分析:
宽度优先遍历按照距开始状态由近及远的顺序进行遍历,因此可以很容易的用来求最短路径、最少操作之类问题的答案。
用C++解决问题:
#include <iostream>
#include <utility>
#include <queue>
using namespace std;
const int INF=100000000;//迷宫中未遍历的地方
typedef pair