理解广度优先搜索的走迷宫问题

本文介绍了一种使用广度优先搜索(BFS)算法解决迷宫寻路问题的方法,通过C++代码实现,详细解释了如何利用队列进行逐层搜索,寻找从起点到终点的最短路径。

最近在更新一些自己学的知识点
这次轮到bfs了

首先就要提到bfs和dfs的区别,dfs其实就是在搜索一棵树,之所以叫深度优先,就是说dfs会优先向下搜索,在搜索完一个结点后,它会优先去搜索这个结点的儿子结点。而bfs在此时则会优先搜索它的兄弟结点,所以我们会说bfs是按层搜索的算法

走迷宫

题目描述
给定一个n*m的二维字符数组,用来表示一个迷宫,数组中只包含’#‘或’.’,其中’.‘表示可以走的路,’#'表示不可通过的墙壁。
最初,有一个人位于起点S处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。
请问,该人从左上角移动至终点T处,至少需要移动多少次。

输入格式
第一行包含两个整数n和m。
接下来n行,每行包含m个字符,表示完整的二维字符数组迷宫。

输出格式
输出一个整数,表示从左上角移动至右下角的最少移动次数。

bfs通常用队列来实现
看题目我们可以得到,当走到点 ‘T’ 的时候就到了终点
所以当前点的横纵坐标与终点 ‘T’ 的坐标相同时,结束bfs
我们只需要每次去遍历这个点可以走的四个方向
判断每个方向是否可以走,并把新的状态入队列即可

char mat[1005][1005];
struct Node{
   
   
	int x,y,step;
};
int dx[] = {
   
   -1,1,0,0} , dy[] = {
   
   0,0,-1,1};
int vis[1001][
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你数过天上的星星吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值