当前位置:网站首页 > 编程语言 > 正文

广度优先搜索怎么遍历(广度优先搜索遍历序列)



        广度优先搜索(遍历)是一种在图的搜索遍历中较常见的算法。它的时间复杂度通常要比深度优先搜索(遍历)要低很多,尤其是最短路。这是因为深度优先的思想是走一条路要把它走到底再去考虑别的路,如果一开始走错了,后面会浪费很多时间在死胡同上,而且递归的方法本来就需要来一次回一次。而广度优先的思想则是让每一条路都向前进发一格,那么走错路不用付出太多代价,而且这样你第一次遇到终点就是答案,因为你每条路都是同层次。层次越少,答案越好。dfs那就惨了,要弄出所有的答案进行对比。它还无需考虑递归出所以函数的return的问题。它还不会那么容易爆栈。

        bfs基本都是用队列实现的。因为它是先进先出的。先进去的结点永远都是先搜完的。

        那队列是怎么操作的呢?别急,慢慢来。首先,我们要把起点push进队列,表示它即将搜索,并标记表示搜过的数组vis记下vis[起点]=1。然后,将起点的数据(坐标、步数、状态等)都保存在一个临时变量里,并将起点pop掉,因为它接下来搜完使命就结束了。接着,我们将所有起点(根据临时变量中的数据)能到达合适没有搜过(!vis[该点])点都放进队列中,表示一会儿就要搜,再让vis[该点]=1,数据根据上个点按需求更改。之后每个点都像起点一样操作,不过是没有“首先”这一步骤的,因为在上个点搜索是它就设置好了。最后,如果队空,说明没有更多结点了,所以就退出。

        对于下图,我给出了它的bfs和dfs搜索顺序:

(代码为c++语言)

定义图

 

定义队列(需要加头文件<queue>)

 

vis数组

 

定义函数

 

初始化起点

 

中间部分

 

1.走迷宫

题目要求

        n*m的迷宫。S是起点,E是终点,#是墙壁,*是路。一段路需要1分钟行走。输出S到E的最短时间是几分钟。如果不能到达,输出-1。请使用bfs。0<n,m<=10^4

输入

        输入n和m,之后n行每行m个字符。

输出

        输出要求的数。

代码:

 

不过你也能看到,编程复杂度有点高。。。

2.图的最短路

题目要求

        给出n个点m条边的无向图,告诉我从点1到其他所有点的最短路(换行隔开)。

        保证每个点都是连通的。0<n,m<10^4

输入

        首先输入n和m。然后m行输入两个数u,v,表示u和v相连。

输出

        按照题意输出。

提示:

        回想vector查看连接点的方法或查看我的这篇文章。

代码:

 

运行结果: 

OK,恭喜你完成所有题目!

        bfs是一个运用场景广泛的算法,时间复杂度也还不错,非常实用。欢迎大家在评论区指点反馈我在文章撰写中的不足!

到此这篇广度优先搜索怎么遍历(广度优先搜索遍历序列)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 本机所有信息(本机所有信息怎么删除)2025-03-09 15:09:08
  • 虚拟机里安装系统(虚拟机安装系统后无法启动)2025-03-09 15:09:08
  • 开源代码网站github下载代码(github开源代码商用)2025-03-09 15:09:08
  • 网页版聊天工具有哪些(网页版聊天工具有哪些功能)2025-03-09 15:09:08
  • nat类型检测工具苹果(nat类型检测网站)2025-03-09 15:09:08
  • iphone15多少钱(iphone16多少钱)2025-03-09 15:09:08
  • 定位开着为什么显示获取位置失败(定位获取失败是怎么回事)2025-03-09 15:09:08
  • ssh免密码登录突然失效了(ssh 免密码登录)2025-03-09 15:09:08
  • 上一章返回目录(返回上一级目录的快捷键)2025-03-09 15:09:08
  • ip域名批量提取查询app(ip域名批量查询器)2025-03-09 15:09:08
  • 全屏图片