ZH
我的工具

Dijkstra 最短路径计算器

对边列表运行 Dijkstra 算法:给出从起点出发的最短距离和路径,以及展示访问与更新过程的分步表格,支持有向和无向图。

从 s 到 x 的最短距离
9
路径
s → y → t → x
从 s 可达的节点
5
共 5 个

每一步都访问尚未访问且当前已知距离最小的节点(并列时取在列表中先出现的节点),并更新它的邻居。

从 s 出发的最短路径
节点距离前驱路径
s0(起点)s
t8ys → y → t
y5ss → y
x9ts → y → t → x
z7ys → y → z
步骤
步骤访问距离更新styxz
1s0t = 10, y = 50105∞∞
2y5t = 8, x = 14, z = 7✓85147
3z7x = 13✓8✓137
4t8x = 9✓8✓9✓
5x9—✓✓✓9✓
我的工具 →
广告

Dijkstra 算法可以在边权不为负的图中,求出从一个节点到其他所有节点的最短路径——它是路线规划、网络路由和许多教材习题的基础。把边按列表输入,选择起点(也可以选终点),这个计算器就会给出所有最短距离和路径,以及一张分步表格,像手工推演那样显示每一步访问了哪个节点、更新了哪些距离。

使用方法

  1. 每行输入一条边:起点、终点和权重(A B 4)。
  2. 单向边请勾选“有向”,双向边则不勾选。
  3. 输入起始节点,以及可选的终止节点。
  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。

边的顺序重要吗?

只在并列时有影响:两个未访问节点的距离相同时,列表中先出现的先被访问。距离本身从不取决于顺序。

“不可达”是什么意思?

从起始节点到该节点没有任何路径——在有向图中,也许所有的边都指向了相反的方向。

资料来源

最后更新:

引用此工具
APA

kakaoCalc. (2026, November 8). Dijkstra 最短路径计算器. https://kakao.mobile/zh/tools/dijkstra-visualizer/

MLA

“Dijkstra 最短路径计算器.” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/dijkstra-visualizer/.

广告