当前位置: 首页 > news >正文

图最短路评测:Dijkstra 对了,也可能用错场景

图最短路评测:Dijkstra 对了,也可能用错场景

一、最短路算法不是只背名字

图论题里,最短路是高频考点。Dijkstra、Bellman-Ford、Floyd、SPFA 名字很多,但真正重要的是场景选择。边权是否为负、点数边数多大、是否多源多汇、是否需要路径恢复,都会影响算法选择。

Dijkstra 写对了,如果用在负权图上,答案仍然可能错。

二、先判断图条件

flowchart TD A[最短路问题] --> B{是否有负权} B -->|否| C[Dijkstra] B -->|是| D{是否有负环} D -->|无| E[Bellman-Ford] D -->|有| F[不存在稳定最短路] A --> G{是否全源} G --> H[Floyd 或多次单源]

算法选择前,先看边权、规模和查询次数。不要看到最短路就直接写 Dijkstra。

shortest_path_decision: non_negative_edges: dijkstra negative_edges_no_cycle: bellman_ford all_pairs_small_graph: floyd

选择依据写清楚,题解才完整。

三、Dijkstra 的关键不变量

import heapq def dijkstra(graph, start): dist = {start: 0} pq = [(0, start)] while pq: d, u = heapq.heappop(pq) if d != dist[u]: continue for v, w in graph[u]: nd = d + w if nd < dist.get(v, float("inf")): dist[v] = nd heapq.heappush(pq, (nd, v)) return dist

Dijkstra 的不变量是:每次从堆里弹出的最小距离节点,在非负边权条件下已经确定最短。负权会破坏这个不变量。

代码里的if d != dist[u]是为了跳过过期堆元素。Python 的堆不支持直接 decrease-key,所以会插入多份候选。

四、评测要覆盖错误场景

如果只用正权图测试,Dijkstra 写错场景也发现不了。评测集应该包含负权边、不可达点、多条等长路径、稠密图、稀疏图和大权值。

shortest_path_tests: unreachable_nodes: true negative_edge: true equal_distance_paths: true large_weight: true

还要测试路径恢复。如果题目要求输出路径,只返回距离不够。需要保存前驱节点,并在更新 dist 时同步更新 parent。

复杂度也要结合图表示。邻接表 + 堆的 Dijkstra 是 O((V+E)logV),邻接矩阵写法可能是 O(V²)。点边规模不同,最优实现也不同。

最后,题解要说明为什么算法适用。比起背出模板,能说清非负边权、不变量和复杂度,更能证明理解到位。

五、总结

图最短路评测要先判断边权、规模、查询类型和输出要求,再选择 Dijkstra、Bellman-Ford 或 Floyd。

Dijkstra 对了不代表场景对了。算法模板之前,先检查它的前提条件。

http://www.gsyq.cn/news/1644316.html

相关文章:

  • 74LS73 异步计数器设计实战:2片芯片实现4位二进制与8421BCD电路对比
  • [特殊字符] Git 协作指南
  • Claude Code的完美国产替代小米 MiMo Code安装指南
  • CameraGraph™全域相机拓扑推理引擎 视频孪生跨镜目标连续追踪核心支撑 空间相机关系张量建模:根治跨镜头目标ID跳变、身份混淆底层算法拆解
  • 2025反爬系统深度解析:从Canvas指纹到AI行为画像的攻防实战
  • ML预测半导体良品率——样本缺失值模式分析(Python+Pandas+Matplotlib)
  • 想了解实力强的陕西GEO优化流程收费情况?这里有答案!
  • WebPShop技术方案:Photoshop插件如何填补WebP动画与专业编码的市场空白
  • 企业级低代码平台技术架构解析:从零代码搭建到异构系统深度集成
  • 【242期】QtScrcpy手机投屏控制的天花板,支持多设备群控!
  • LINQ to SQL、NHibernate比较(一)-- LINQ和NHibernate初体验
  • YOLOv10模型改进-Neck改进-第68篇:YOLOv10改进策略【Neck】| CSPPAN改进
  • Video2X:用AI魔法让模糊视频重获新生
  • 什么是相机标定
  • AI Agent框架:从模型驱动到任务执行的关键工程化实践
  • 059、RealBasicVSR 实战:真实场景视频超分的退化建模与优化技巧
  • 信息论与编码课程调研报告:连续AWGN信道中香农容量极限的数学推导与MATLAB仿真实现(P124302067 吴晨晨,P124302076 吕欣欣)
  • AI编程接单实战复盘:Claude Code 4天完成电商开票系统迭代,5000元私活全过程
  • Dell PERC H330/H730 RAID 卡实战:R730 创建 RAID-5 与删除配置 12 步详解
  • 电话机器人厂家哪个好
  • 德明利:从布头生意到整布豪赌,存储赛道的独特玩家能否再赢一局?
  • 第2章 异常
  • 村长团队教你用3dMax + ZM3制作GTA5水源教程
  • YOLOv10模型改进-Neck改进-第74篇:YOLOv10改进策略【Neck】| FPN-DCN可变形卷积
  • 蓝速科技会议电子门牌部署与可视化管控指南
  • 通达信竣宝绝密主升连板量化选股与量化交易指标公式抓底部启动牛股 主力机构游资启动选股公式 波段擒龙决
  • 实用微信QQ防撤回补丁完整指南:告别消息丢失的终极方案
  • 如何免费解锁9大网盘高速下载权限:完整实战指南
  • LeetCode第三方解绑定 微信一个账号,手机号一个账号
  • 第19章|有章可循:Rules 规则系统深度剖析