Dijkstra のアルゴリズムの実装では、すべてのノードを含む 1 つの配列と、すべてのノードを含む 1 つの優先キューがあります。ノードがデキューされるたびに、隣接するすべてのノードを新しい距離とそれがどこから来たかで更新するので、パスをバックトラックできます。
プライオリティ キュー内のノードは新しい距離で更新され、配列内のノードは元の場所と新しい距離で更新されます。ノードがデキューされると、配列内の最終距離が更新されます。
PathInfo current = pq.remove();
path[current.pos].distance = current.distance;
前のノードに関する情報で配列を更新し、距離で優先キューを更新することは許容されますか?
これは、より適切な距離が見つかるたびに発生します。
PathInfo key(i, newDistance);
path[i].distance = newDistance;
path[i].previous = current.pos;
pq.decreaseKey(key);
基本的に同じ情報でアレイとプライオリティ キューを更新するのは少し冗長に思えます。
現在、PQ のデータ構造として通常の配列を使用しています。優先度の更新は線形時間で行われ、デキューも線形時間で行われます。
プライオリティ キューではどのデータ構造を使用すればよいですか? また、ノードのプライオリティを変更するにはどうすればよいですか?
私はC++を使用しています