队列和广度优先搜索(BFS)

BFS:全称Breadth First Search,宽度优先搜索,又称广度优先搜索
这里写图片描述
如上图:
使用 BFS 来找出根结点 A 和目标结点 G 之间的最短路径。
步骤如下:
第一轮:根节点A节点放入队列,将与A相邻的节点放入队列即队列中元素为ABCD,A出队(处理完A节点)
第二轮:将与队头B相邻的节点放入队列,此时队列元素为BCDE,B出队(处理完B节点)
将与队头C相邻的元素放入队列,此时队列元素为CDEF,C出队(处理完C节点)
将与队头D相邻的元素放入队列,此时队列元素为DEFG,此时G点入队,随即发现根节点访问到G点的最短路径为A-D-G。D出队(处理完D节点)
第三轮:将与队头E点相邻的节点放入队列,没有节点放入,此时队列元素为EFG,E出队
将与队头F点相邻的节点放入队列,G上轮已放入,没有节点放入,此时队列元素为FG,F出队
将与队头G点相邻的节点放入队列,没有节点放入,此时队列元素为G,G出队。所有节点都被入队并处理,搜索结束。

注意:在第一轮中,我们处理根结点。在第二轮中,我们处理根结点旁边的结点;在第三轮中,我们处理距根结点两步的结点;等等等等。与树的层序遍历类似,越是接近根结点的结点将越早地遍历;结点的处理顺序与它们添加到队列的顺序是完全相同的顺序,即先进先出(FIFO)。这就是我们在 BFS 中使用队列的原因。

总结:如果在第 k 轮中将结点 X 添加到队列中,则根结点与 X 之间的最短路径的长度恰好是 k(上面第二轮中将G点添加到队列中,则根节点到G之间的最短路径长度是2)。也就是说,第一次找到目标结点时,你已经处于最短路径中。此为使用队列和广度优先找最短路径的根本思想。

发布了62 篇原创文章 · 获赞 14 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览