BFS广度优先搜索第1章——队列

从今天起,我们开始讲广度优先搜索

1.什么是搜索

C++里的搜索可不是你出门时找不到在这里插入图片描述,然后满屋子搜索。简单来说,广度优先搜索就是走迷宫,你要从起点走到终点,并且要是最短的路径。

2.例题

举个栗子
题目描述
小a被困在了一个迷宫里,他需要马上回到家。他的位置在(1,1)。迷宫是一个n×m的矩形。迷宫里有一些怪兽,有怪兽的点标为#号,没怪兽的地方标为&号,小a的家标为@,他每次可以向上下左右四个方向走,但不能走入怪兽的格子里。问你他最少要走多少次才能到家?如果到不了,请输出-1
输入样例1

5 5
&&&#&
#&&##
&&###
&###&
&@###

输出样例1

7

输入样例2

2 3
&#&
#&@

输出样例2

-1

3.队列是什么

看了刚才这道题,是不是有些无从下手🤣???这其实就是一道标准的BFS模板题哦!不用着急,我们慢慢来看。要想学会广度优先搜索,要先学会一个数据结构,那就是——队列
先来看一些杂七杂八的概念:
1、队列(Queue)的特点:
(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构;
(2)在队尾添加元素,在队头删除元素。
2、队列的相关概念:
(1)队头与队尾: 允许元素插入的一端称为队尾,允许元素删除的一端称为队头;
(2)入队:队列的插入操作;
(3)出队:队列的删除操作。
3、队列的操作:
(1)入队: 通常命名为q.push()
(2)出队: 通常命名为q.pop()
(3)求队列中元素个数q.size()
(4)判断队列是否为空q.empty()
(5)获取队首元素q.front()
4、队列的分类:
(1)基于数组的循环队列(循环队列)
(2)基于链表的队列(链队列)
——————————————————
说了这么多,其实你可以把队列当成一个做核酸的队伍,如下图。
在这里插入图片描述因为小a是第一个来的,所以他先做完核酸。接下来做核酸的顺序是先小b再小c。所以队列是个先进先出的数据结构。

4.为什么要用队列呢

知道队列是什么了吧!现在问题来了:为什么要用队列呢?它在搜索中有什么特别的“法力”呢?要知道这个问题,我们画一个迷宫就好了。
在这里插入图片描述
上图是一个参照输入样例1画出来的迷宫,起点在(1,1)的位置。按照搜索顺序依次往四个方向走。
往上走出迷宫。
往下遇到怪兽。
往左走出迷宫。
往右走至一号点。
上下左右都走了一遍,小a发现只能往右走到一号点,所以我们就让一号点第一天来做核酸(进队列),做完核酸后,一号点说:“我做完了,我要出队列,但我要让二号和三号点第二天来做核酸。”这是因为小a走到一号点后,发现只能走往二号点和三号点。而二号点和三号点又不约而同的叫来的四号点,四号点又叫来了五号点……直到所有点都做完核酸(除走不到的点以外),及队列为空。
————————————————
通过刚才这个做核酸的过程,你理解了队列在搜索中是怎么使用的吗?走向四周这个过程我会在下一讲给你详细讲解哦!
好了,今天对广度优先搜索的讲解就先到这里,下一章我们不见不散哦!
最后
原创不易,如果对您有帮助,请点个赞再走呀(づ ̄3 ̄)づ╭❤
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
BFS广度优先搜索算法(Breadth-First Search)是一种图的搜索算法,也是最简便的图搜索算法之一。它的目的是系统地展开并检查图中的所有节点,以找寻结果。这个算法不考虑结果的可能位置,而是彻底地搜索整张图,直到找到结果为止。广度优先搜索算法通常用于找出两个节点之间的最短路径。它可以帮助我们解决类似于寻找最短路径的问题。 BFS算法的基本思想是从起始节点开始,逐层地向外扩展,先访问离起始节点最近的节点,再逐渐向外层节点扩展,直到达到目标节点。它使用队列来存储待访问的节点,先进先出(FIFO)的特点保证了广度优先。通过不断地将节点加入队列并访问,直到队列为空,我们可以遍历整张图并找到最短路径。 BFS广度优先搜索算法的运行时间为O(V+E),其中V为顶点数,E为边数。它可以指出是否存在从起始节点到目标节点的路径,并且可以找到最短路径。当面临需要寻找最短路径的问题时,我们可以使用图来建立模型,并使用广度优先搜索算法解决问题。 参考资料: https://www.cnblogs.com/tianqizhi/p/9914539.html 文中引用的参考资料<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [代码 基于BFS广度优先搜索算法代码](https://download.csdn.net/download/s13166803785/85545057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [广度优先搜索算法BFS)详解](https://blog.csdn.net/lemonxiaoxiao/article/details/105730735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值