作为决赛的一部分,我必须在星期二介绍贪婪算法。但是我正在努力理解Dijkstra算法的伪代码,这是我的任务之一。
维基百科的示例:
1个函数Dijkstra(图形,源):
2 dist [source]←0 //初始化
4创建顶点集Q
图中每个顶点v的6:
7,如果v≠源
8 dist [v]←INFINITY //源到v的未知距离
9 prev [v]←未定义// v的前身
11 Q.add_with_priority(v,dist [v])
14,而Q不为空://主循环
15 u←Q.extract_min()//删除并返回最佳 顶点
u的每个邻居v为16://仅剩Q的v
17 alt←dist [u] +长度(u,v)
18,如果alt 19 dist [v]←alt 20上一页[v]←u 21 Q.decrease_priority(v,alt) 22 23 return dist,上一个 来自TUM的示例:
开始 d(v [1])←0 FOR i = 2,..,n DO WHILE队列≠∅DO END d(v[i]) ← ∞, parent(v[i]) ← NULL
u = queue.extractMin()
FOR ALL (u,w) ∈ E DO
dist ← d(u) + l(u,w)
IF w ∈ queue AND d(w) > dist DO
d(w) = dist, parent(w) = (u,w)
ELSE IF parent(w) == NULL THEN
d(w) = dist, parent(w) = (u,w)
queue.insert(w,dist)