Dijkstra 最短路径计算器
对边列表运行 Dijkstra 算法:给出从起点出发的最短距离和路径,以及展示访问与更新过程的分步表格,支持有向和无向图。
每一步都访问尚未访问且当前已知距离最小的节点(并列时取在列表中先出现的节点),并更新它的邻居。
| 节点 | 距离 | 前驱 | 路径 |
|---|---|---|---|
| s | 0 | (起点) | s |
| t | 8 | y | s → y → t |
| y | 5 | s | s → y |
| x | 9 | t | s → y → t → x |
| z | 7 | y | s → y → z |
| 步骤 | 访问 | 距离 | 更新 | s | t | y | x | z |
|---|---|---|---|---|---|---|---|---|
| 1 | s | 0 | t = 10, y = 5 | 0 | 10 | 5 | ∞ | ∞ |
| 2 | y | 5 | t = 8, x = 14, z = 7 | ✓ | 8 | 5 | 14 | 7 |
| 3 | z | 7 | x = 13 | ✓ | 8 | ✓ | 13 | 7 |
| 4 | t | 8 | x = 9 | ✓ | 8 | ✓ | 9 | ✓ |
| 5 | x | 9 | — | ✓ | ✓ | ✓ | 9 | ✓ |
Dijkstra 算法可以在边权不为负的图中,求出从一个节点到其他所有节点的最短路径——它是路线规划、网络路由和许多教材习题的基础。把边按列表输入,选择起点(也可以选终点),这个计算器就会给出所有最短距离和路径,以及一张分步表格,像手工推演那样显示每一步访问了哪个节点、更新了哪些距离。
使用方法
- 每行输入一条边:起点、终点和权重(A B 4)。
- 单向边请勾选“有向”,双向边则不勾选。
- 输入起始节点,以及可选的终止节点。
- 查看距离与路径、所有节点的表格,以及各个步骤。
计算公式
重复:访问未访问节点中 d(u) 最小的 u · 对每条 u → v 的边(权重 w):若 d(u) + w < d(v),则令 d(v) = d(u) + w,prev(v) = u
除起点(0)外,所有距离初始为 ∞。节点一旦被访问,其距离就是最终的,而这只有在没有负权时才能保证——因此负权会被拒绝(Bellman–Ford 可以处理)。路径通过沿 prev 回溯到起点来还原。并列时先列出的节点优先。允许平行边,取较小的那条。
示例
示例是《Introduction to Algorithms》(CLRS)图 24.6 中的有向图。从 s 出发,访问顺序是 s(0)、y(5)、z(7)、t(8)、x(9)。到 x 的最短路线是 s → y → t → x,长度 9(5 + 3 + 1)。看起来直达的 s → t 边(10)输给了 s → y → t(8)。
常见问题
为什么 Dijkstra 不能处理负权?
因为它在访问节点时就固定了该节点的距离。之后发现的负权边可能让这个距离变得更小,结果就会出错。请改用 Bellman–Ford。
边的顺序重要吗?
只在并列时有影响:两个未访问节点的距离相同时,列表中先出现的先被访问。距离本身从不取决于顺序。
“不可达”是什么意思?
从起始节点到该节点没有任何路径——在有向图中,也许所有的边都指向了相反的方向。
资料来源
最后更新:
包含这些输入的页面地址: https://kakao.mobile/zh/tools/dijkstra-visualizer/
引用此工具
kakaoCalc. (2026, November 8). Dijkstra 最短路径计算器. https://kakao.mobile/zh/tools/dijkstra-visualizer/
“Dijkstra 最短路径计算器.” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/dijkstra-visualizer/.