Dijkstra负权边问题的关键,是“当前最小距离一旦确定,以后不会变小”这一判断失去保证。负边可能从后处理的顶点返回已确定顶点,带来更小距离。知英教育下面分析经典的已确定顶点不再重开的版本,使用一张无环自编有向图。

先写五条边,别把箭头看反

起点S、目标T,中间顶点A、B;边为S→A权2、S→B权5、B→A权-4、A→T权2、B→T权8,没有其他边。S→A→T长度为4;S→B→A→T长度为5-4+2=3;S→B→T为13。因此最短应为3。图中没有从A反向到B的边,也没有环,反例不依赖负环。

经典确定步骤在哪里提前结束

处理S后,A暂定2、B暂定5,T尚不可达。选择A,确定2,把T更新为4。此时未确定候选中T的4小于B的5,先选择T;若目标确定即结束,就输出4。即使继续处理B,经典版本也不会重开已确定的A,无法把经B得到的较短路线完整传播到T。

知英教育建议同时记录暂定距离和已确定集合。解释Dijkstra负权边反例时,除了给出较短路径,还要指出A先确定、T随后确定,而有用的负边要等B处理时才被查看。失效的是确定步骤所依据的条件,不是加减法。

经典Dijkstra先确定A再确定T,未查看B的负边
当前最小暂定值被当成最终值,是反例的关键。

非负条件为什么重要

相关边权非负时,从更远的未确定顶点继续走,不会凭空减少已走距离,这是经典贪心证明的重要条件。权重0仍是非负,不应误写成所有权必须严格大于0。存在负边表示通用正确性保证不能直接使用,也不意味着每张含负边的图都一定算错。

不能给所有边统一加同一个常数来消除负数:路线经过的边数不同,增加的总量也不同。上例长度4的路线有2条边,长度3的路线有3条边;统一加权可能改变原来的优劣次序。

非负边与负边条件下经典算法保证的区别
算法保证、单个算例和负环是不同问题。

根据图的条件选择后续方法

一般可含负边的单源最短路可学习Bellman–Ford等相应方法,并检查可达负环;有向无环图还可按拓扑序处理。某个程序若改成反复重开顶点,需另论正确性与成本,不能沿用经典Dijkstra的证明。复盘Dijkstra负权边练习,保留方向、边权、选择顺序和真实最短路径四项。

知英教育可协助梳理图算法适用条件。查看软件设计师学习方向,通过咨询入口提供自编图和推导步骤;本文不是考试原题,也不预测考试结果。

资料来源:北京大学:数据结构第十一讲最短路径;南京大学:图论最短通路练习的负权条件问题。核对日期:2026年10月22日;五边反例由本文独立编写。