一、题目描述
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 6040 通过数: 2707(2019/10/29)
【题目描述】
一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到)。只能在水平方向或垂直方向走,不能斜着走。
【输入】
第一行是两个整数,R和C,代表迷宫的长和宽。( 1≤ R,C ≤ 40)
接下来是R行,每行C个字符,代表整个迷宫。
空地格子用‘.’表示,有障碍物的格子用‘#’表示。
迷宫左上角和右下角都是‘.’。
【输出】
输出从左上角走到右下角至少要经过多少步(即至少要经过多少个空地格子)。计算步数要包括起点和终点。
【输入样例】
5 5
…###
#…
#.#.#
#.#.#
#.#…
【输出样例】
9
【来源】
No
二、算法分析说明与代码编写指导
BFS求最短路
1、用途:对无权图或矩阵样式的块求最短路径(每步长度相同)。
2、算法内容:
设队列q。先将起点入队,然后以下部分循环直到队列为空,然后输出:
取q的队首,弹出。然后将q周围全部的可走的点都入队。入队的全部点都要标记已访问,以免死循环。
当队列为空,如果不在终点,则起点到终点无通路;否则,找到了一条最短路径。
3、补充说明:
【1】如果需要输出最短路径需要经过的步数(长度),应该用额外的数组存储已走的步数。
当取队首的某一点后,将周围的可行点入队时,对应位置的步数是取到的点的步数+1。
========================================================================================
一开始写的时候没注意,忘记判断点已经访问,然后就死循环,队列长炸了,不停 MLE + RE。
然后我就把数据类型全部改成字节数少的,结果没屁用。找 AC 代码去对才发现问题的。
迷宫最大 40 行 40 列,在该情况下要给周围一圈留下位置,不然

本文详细介绍了如何使用BFS算法解决信息学奥赛中的迷宫问题,从题目描述到输入输出解析,再到算法分析和AC代码实现,帮助读者理解并掌握这一经典问题的解题思路。
最低0.47元/天 解锁文章
2569

被折叠的 条评论
为什么被折叠?



