宽度有限搜索BFS搜索
B3625 迷宫寻路
题面
题目描述
机器猫被困在一个矩形迷宫里。
迷宫可以视为一个 n×m 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。
机器猫初始时位于 (1,1) 的位置,问能否走到 (n,m) 位置。
输入格式
第一行,两个正整数 n,m。
接下来 n 行,输入这个迷宫。每行输入一个长为 m 的字符串,# 表示墙,. 表示空地。
输出格式
仅一行,一个字符串。如果机器猫能走到 (n,m),则输出 Yes;否则输出 No。
输入输出样例
输入 #1
3 5 .##.# .#... ...#.
输出 #1
Yes
说明/提示
样例解释
路线如下:(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)
题解
BFS的思路是从标点(1,1)开始逐层往外扩展,此时我们选择建立一个队列用来保存待访问的点,只要队列非空,判断越界情况和其他非法情况后一直访问相邻位置,可以用一个结构组表示x,y坐标。为了避免重复访问的情况,我们使用vis函数。访问一个点后把vis[x][y]负值与1。到最后如果队列的某个点到了(n,m) 终点,答案设为true,输出这个情况YES。
代码
#include <bits/stdc++.h>
using namespace std;
int n, m, isOk;
char a[105][105];
bool vis[105][105];
struct Pos {
int x, y;
Pos(int ax, int ay) {
x = ax, y = ay;
}
};
void bfs() {
queue<Pos> q;
q.push(Pos(1, 1));

本文介绍了如何使用BFS算法解决宽度有限的迷宫寻路、机器人跳跃至目标格子以及计算给定矩阵的细胞数量问题。
最低0.47元/天 解锁文章
504





