Dijkstra's Algorithm能否处理负权边?《算法图解》习题相关疑问咨询

问题解答
首先明确两个基础结论:
- Dijkstra算法本身不支持处理带负权边的图,本质逻辑是:算法运行过程中只要把某个节点标记为「已找到最短路径、加入已处理集合」,后续就不会再更新这个节点的距离。如果图中存在负权边,后续可能出现更短的路径可以刷新已处理节点的距离,就会导致最终结果出错。
- 这道题在有负权边的前提下仍有可行解,核心原因是这张特定的图的负权边,刚好不会触发上述的错误场景。
你可以手动模拟一次算法运行流程验证:
- 初始状态:起点距离设为0,其余所有节点距离设为无穷大,已处理集合为空
- 每轮选出当前未处理节点里距离最小的节点,更新它所有邻接节点的距离,再把该节点加入已处理集合
- 直到终点被加入已处理集合,结束运算
这张图里唯一的负权边,它指向的目标节点,在被这条负权边更新距离的时候,还没有被标记为已处理,所以算法可以正常完成更新,最终得到正确的最短路径结果。
简单说就是:不是Dijkstra突然支持负权边了,只是这道题的图结构特殊,负权边没有触碰到Dijkstra的错误边界,所以存在可行解。
内容的提问来源于stack exchange,提问作者YusufEmad04
相关产品推荐
相关产品推荐

