题目
给定一个大小为N∣timesMN|times MN∣timesM的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四个的通道移动,请求出从起点到终点所需的最小步数。限制条件N,M≤100N,M\le 100N,M≤100。
输入
(’#‘
,'.'
,'S'
,'G'
分别表示墙壁、通道、起点和终点)
N=10,M=12N=10, M=12N=10,M=12
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
输出
22
分析
宽度优先搜索按照距开始状态由近即远的顺序进行搜索,因此可以很容易地用来求最短路径、最少操作之类问题的答案。
可以用d[N][M]
数组把最短距离保存起来,用充分大得常数INF
来初始化,这样一来,尚未到达的位置就是INF
。
因为要向四个方向移动,用dx[4]
和dy[4]
两个数组来表示四个方向向量,通过循环就可以实现四个方向移动得遍历。
代码
#include <iostream>
#include <stdio.h>
#