私はウィキペディアDjikstraのアルゴリズム:隣人や子供を繰り返していますか?
1 function Dijkstra(Graph, source):
2
3 create vertex set Q
4
5 for each vertex v in Graph: // Initialization
6 dist[v] ← INFINITY // Unknown distance from source to v
7 prev[v] ← UNDEFINED // Previous node in optimal path from source
8 add v to Q // All nodes initially in Q (unvisited nodes)
9
10 dist[source] ← 0 // Distance from source to source
11
12 while Q is not empty:
13 u ← vertex in Q with min dist[u] // Source node will be selected first
14 remove u from Q
15
16 for each neighbor v of u: // where v is still in Q.
17 alt ← dist[u] + length(u, v)
18 if alt < dist[v]: // A shorter path to v has been found
19 dist[v] ← alt
20 prev[v] ← u
21
22 return dist[], prev[]
https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
上の擬似コードでDjikstraのアルゴリズムで探していて、私を混乱だ部分がライン16
です。 for each neighbor
と記載されていますが、それはfor each child
(つまりfor each neighbor where neighbor != parent
)であるべきではありません。さもなければ、私は親を20
の行に設定する点を見ません。
コードコメントにはすべてが記載されています:* vはまだQ *にあります。この時点で、uの親はもうキューに入れることはできません。 –