← SEARCHABLE ARCHIVE
Algorithm · 2026-07-11

Dijkstra 和 A* 最短路径

使用旅行成本和估计距离进行路线导航

INTERACTIVE READING MODE →

该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。

如果每个区块的移动成本不同,仅靠简单的 BFS 无法保证最便宜的路线。 这时候就用到了Dijkstra、A*等最短路径算法。

Dijkstra

从起点到现在累计成本最低的顶点首先进行扩展。

新成本 = 当前成本 + 下一干线成本

如果新的成本低于旧的记录
更新距离和先前的顶点。

使用优先级队列时,一般O((V + E) log V)可以执行到这个程度。 不应使用默认的 Dijkstra,因为负边的存在可能会减少已建立的最短距离。

A*

A* 是从起点算起的实际成本g以及达到目标的预计成本。h添加以确定优先级。

f(n) = g(n) + h(n)

在网格中,曼哈顿距离或欧几里得距离可以用作启发式。 对于六角网格,必须使用适合六角坐标的距离函数。

如果估计成本没有高估实际的最低剩余成本,则可以保证最短路径。 如果 Heuristic 为 0,A* 的行为类似于 Dijkstra。

使用哪一个?

需要从一个起点出发的多个目的地成本:Dijkstra
快速导航至一个目的地:A*
所有中继成本相同:BFS

路径搜索性能不仅仅由算法名称决定。 还必须检查邻居生成成本、障碍物表示、优先级队列和启发式质量。