在我的Dijkstra算法实现中,我有一个包含所有节点的数组和一个包含所有节点的优先队列。每当一个节点被出队时,我会更新所有相邻节点的新距离和它们来自哪里,以便我可以回溯路径。
优先队列中的节点会被更新为新的距离,而数组中的节点会被更新为它来自哪里和新的距离。当一个节点被出队时,数组中的最终距离会被更新:
优先队列中的节点会被更新为新的距离,而数组中的节点会被更新为它来自哪里和新的距离。当一个节点被出队时,数组中的最终距离会被更新:
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 ++。
decreaseKey()
,我认为您不需要其他任何东西。 - comingstormheapIndex
字段。每次移动堆节点时都需要更新它。 - comingstorm