为何BFS用queue解决是合理的

为何BFS用queue解决是合理的
想象这个问题场景. 由于BFS要求以源节点为中心, 从近到远访问所有节点.
我们用递推证明访问顺序是从近到远的:
起初, 队列中只有一枚源节点.
当k=1时, 取出队首访问, 标记为不可再访问, 将其所有邻居加入队列. 这样会把所有距离为1的节点加入, 并标记不可再访问.
当k=2时, 依次取出队列所有节点, 对其访问并标记. 将所有可以访问的邻居加入队列并标记. 在该阶段开始时, 有这样几个性质:

  1. 所有距离0和1的节点都已标记不可再访问. 这样之后能加入队列的节点一定是距离2以上的.
  2. 每个距离1的节点都已加入队列, 都将被访问, 而每个距离2的节点都与某距离1的节点相连, 因此每个距离2的节点都将被访问. 队列中当前只有距离为1的点, 因此遍历这些点, 只会将距离为2的点加入, 而不会有其它距离的点加入.

由此类推, 可得所有距离的节点都会被访问, 且会按照距离顺序被访问.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值