BFS求解最短路问题汇总

题型一:
边 权 均 为 1 , 求 解 s 到 t 的 最 短 路 边权均为1,求解s到t的最短路 1st
普 通 B F S , 复 杂 度 为 O ( ∣ V ∣ + ∣ E ∣ ) 普通BFS,复杂度为O(|V|+|E|) BFSOV+E
证 明 : q u e u e 维 护 一 个 d i s 单 调 不 减 的 序 列 , 更 准 确 地 说 队 列 存 储 的 是 一 群 a + 一 群 ( a + 1 ) , 动 动 脑 筋 就 知 道 为 什 么 了 证明:queue维护一个dis单调不减的序列,更准确地说队列\\存储的是一群a+一群(a+1),动动脑筋就知道为什么了 queuedisa+(a+1)
有 了 这 个 性 质 , 我 们 就 可 以 根 据 d p 的 思 想 , 发 现 距 离 为 1 的 状 态 为 最 优 状 态 , 推 出 距 离 为 2 的 状 态 也 为 最 优 状 态 , 即 一 旦 加 入 队 列 , 该 元 素 的 最 优 值 已 被 确 定 ! 有了这个性质,我们就可以根据dp的思想,发现距离为1的\\状态为最优状态,推出距离为2的状态也为最优状态,即一\\旦加入队列,该元素的最优值已被确定! dp12

题型二:
边 权 为 非 负 数 , 求 解 s 到 t 的 最 短 路 边权为非负数,求解s到t的最短路 st
B F S + 优 先 队 列 , 复 杂 度 为 O ( ( ∣ V ∣ + ∣ E ∣ ) ∗ l o g ) BFS+优先队列,复杂度为O((|V|+|E|)*log) BFS+OV+Elog
证 明 : p r i o r i t y _ q u e u e 维 护 一 个 d i s 单 调 不 减 的 序 列 , 如 果 其 中 有 一 个 点 进 行 了 扩 展 , 那 么 该 点 就 不 可 能 再 被 更 新 d i s ( 由 于 边 权 非 负 以 及 d i s 单 调 不 减 ) , 因 此 可 以 推 出 最 多 有 ∣ V ∣ 个 点 会 进 行 扩 展 即 O ( ∣ E ∣ ∗ l o g ) 证明:priority\_queue维护一个dis单调不减的序列,如果\\其中有一个点进行了扩展,那么该点就不可能再被更新dis\\(由于边权非负以及dis单调不减),因此可以推出最多\\有|V|个点会进行扩展即O(|E|*log) priority_queuedisdisdisVOElog

题型三:
边 权 为 0 或 1 , 求 解 s 到 t 的 最 短 路 边权为0或1,求解s到t的最短路 01st
B F S + d e q u e , 复 杂 度 为 O ( ∣ V ∣ + ∣ E ∣ ) BFS+deque,复杂度为O(|V|+|E|) BFS+dequeOV+E
证 明 : 显 然 维 护 的 队 列 元 素 对 应 的 距 离 只 有 两 种 值 , 于 是 直 接 b f s 即 可 , 如 果 遇 到 边 权 为 0 , 则 把 放 到 双 端 队 列 前 面 , 否 则 放 到 后 面 , 这 样 依 旧 可 以 保 证 队 列 只 有 两 种 d i s 值 。 证明:显然维护的队列元素对应的距离只有两种值,于是直接bfs\\即可,如果遇到边权为0,则把放到双端队列前面,否则\\放到后面,这样依旧可以保证队列只有两种dis值。 :bfs0dis

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值