C++ 广度优先搜索

广度优先搜索和一条路走到底走不通再回头的深度优先搜索不同的是,他按层进行搜索的,会按照设定好的方向例如[右, 上, 左, 下]的逆时针方向,先将四个方向的下一个点能走的全部放进一个队列种,然后按照队列的顺序依次走下一层,所以广度有点搜索不仅可以判断连通性的问题还可以判断到达终点需要的步数;

同样以迷宫

S. . .
##. .
##. .
T. . .

为例子来进行广度优先搜索:

首先由于需要用到队列所以需要队列的头文件,依然是字符地图,方向数组以及地图大小和起始点,这里为了判断需要的步数所以定义了一个结构体包括当前位置(x,y)以及到当前位置用了几步。

在这里插入图片描述
首先输入地图以及确定起始点。
建立一个队列que,将起始点入栈,起始点的步数为0,之后若队列不为空的话,就是可以继续遍历,按照方向数组得到下一个点的位置(xx,yy)假如新的点是终点T的话直接输出当前节点+1的步数因为判断的是下一个点才是终点,假如是路‘ . ’的话就将该点进栈,并且该点的步数为栈首(也就是上一个点)的步数+1,假如队列空了还没有返回值的话,也就意味这没有能够到达。

在这里插入图片描述
最后看下结果:
最后输出了达到的步数为7
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值