队列和广度优先搜索(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)。也就是说,第一次找到目标结点时,你已经处于最短路径中。此为使用队列和广度优先找最短路径的根本思想。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值