在我的 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++