笃学不倦|BFS广度优先遍历详解

Posted 邯郸学院软件学院团委

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笃学不倦|BFS广度优先遍历详解相关的知识,希望对你有一定的参考价值。

今天我们要学习的是另外一种常用的搜索算法——

广度优先遍历,它并没有固定的代码格式,只是一种遍历方式的思想。广度优先遍历一般用于求最短路径问题,我们用一个社交图来举例。


笃学不倦|BFS广度优先遍历详解




上图是一个无向图,用0表示两个人不是朋友,大于0值表示两个人是朋友关系,要求遍历出zzx的所有的朋友。

广度优先遍历是以给定点为起始点,一圈一圈的遍历相关的所有点,和DFS不同的是,它整体遍历完相关所有的点然后才会去遍历下一层。所有的遍历完之后就能得到最短路径。

我们来分析社会关系图代码,首先要将与给定名称是朋友的所有名称入队列,借助队列的先进先出特性,与zzx直接相关的朋友会先进入队列,它的朋友再将朋友带入队列,这样产生的效果形象的来说就是一圈一圈的去遍历。

首先需要队列和一个标记数组,有时候队列里面需要存放的不一定是整形,也有可能是结构体或者是类。


笃学不倦|BFS广度优先遍历详解




然后我们将名称对应的下标入队列。 


笃学不倦|BFS广度优先遍历详解




接下来我们做的动作都是重复性的,即在队列不为空的前提下,访问队头的元素,保存队头元素的下标,然后将队头元素出队,将队头元素的朋友入队列。


笃学不倦|BFS广度优先遍历详解




完整代码:


笃学不倦|BFS广度优先遍历详解




好啦,广度优先遍历到这里就讲完了,小软相信聪明的小同学们肯定都已经学会了,那我们就下期再见吧。


笃学不倦|BFS广度优先遍历详解

部分图片来源于网络

责任编辑:付子腾   毛丽颖



以上是关于笃学不倦|BFS广度优先遍历详解的主要内容,如果未能解决你的问题,请参考以下文章

用广度优先遍历能将邻接表转化成逆邻接表吗

题目1457:非常可乐(广度优先遍历BFS)

算法|图的遍历-广度优先搜索(BFS)

深度优先遍历 (DFS) 与广度优先遍历 (BFS)

广度优先遍历-BFS深度优先遍历-DFS

Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)