在我对Dijkstra算法的实现中,我有1个包含所有节点的数组和1个包含所有节点的优先级队列.每当一个节点出列时,我用新的距离和它来自哪里更新所有相邻节点,所以我可以回溯路径.
优先级队列中的节点将使用新距离进行更新,并且阵列中的节点将更新来自新距离的位置.当节点出列时,阵列中的最终距离会更新:
PathInfo current = pq.remove();
path[current.pos].distance = current.distance;
Run Code Online (Sandbox Code Playgroud)
是否可以使用有关前一节点的信息和具有距离的优先级队列更新阵列?
只要找到更好的距离,就会发生这种情况
PathInfo key(i, newDistance);
path[i].distance = newDistance;
path[i].previous = current.pos;
pq.decreaseKey(key);
Run Code Online (Sandbox Code Playgroud)
使用基本相同的信息更新我的阵列和优先级队列似乎有点多余.
我目前正在使用常规数组作为PQ中的数据结构.更新优先级以线性时间完成,并且出队也在线性时间内完成.
我应该在优先级队列中使用什么数据结构?如何更改节点优先级?
我正在使用C++