我正在尝试使用优先级队列来实现dijkstra算法,但我无法理解它是如何工作的。我在网上阅读了很多指南,但我根本无法理解这个算法。
我的问题是:每个节点的优先级是什么?我认为它是最小值的传入边缘的权重,但我不确定。这是真的吗?
第二个问题,当我提取队列的根时,如果这个节点不与没有任何一个被访问节点相邻,该怎么工作?
答案 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