具有最小优先级队列的Dijkstra算法

时间:2013-08-19 13:11:57

标签: graph path priority-queue dijkstra shortest-path

我正在尝试使用优先级队列来实现dijkstra算法,但我无法理解它是如何工作的。我在网上阅读了很多指南,但我根本无法理解这个算法。

我的问题是:每个节点的优先级是什么?我认为它是最小值的传入边缘的权重,但我不确定。这是真的吗?

第二个问题,当我提取队列的根时,如果这个节点不与没有任何一个被访问节点相邻,该怎么工作?

1 个答案:

答案 0 :(得分:17)

您应该使用priority queue,其中与起始vertex距离最短的vertex将获得最高优先级。最初,所有vertices将具有无穷远的最短距离,并且起始vertex将具有最短距离0.

首先在vertices内的图表中插入所有edges(及其PQ)。从vertex移除PQ并浏览其所有edges。将最短距离与所有相邻vertices进行比较,如果任何距离小于当前vertex上的最短距离,请更新vertex内的相邻PQ最短距离。 PQ不为空时继续。没有Vertices的{​​{1}}将以最短的无限远距离结束,因为它不可能从起始edges“到达它们”。但是,它们仍会从vertex中删除。

<强>伪代码

PQ

麻省理工学院开放式课件链接:
Path problems overview
Dijkstra