使用Dijkstra和min heap c ++查找节点之间的最短路径

时间:2013-04-16 22:03:32

标签: c++ heap dijkstra

这是一个更普遍的问题。我有一张地图,将城市名称映射到其节点(包含国家,纬度,长等基本信息)。每个城市节点都有一个指向目标节点的边缘数组。边缘有时间和成本成员。我想找到在两个节点之间旅行的最短时间,但我开始混淆自己最好的方法来解决这个问题。

我创建了自己的min heap类,它基于城市节点的向量。我能够创建地图将城市节点从地图添加到最小堆。我已经编写了dijkstra算法来找到最短的路径,它适用于某些路径但不是全部路径。我相信这是因为当我更新dijkstra算法的城市节点的权重时,堆没有正确排序。

一旦我更新了节点的权重,我应该如何重新堆积堆以使最低权重位于顶部?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果要对整个堆进行排序,请快速查看 http://en.wikipedia.org/wiki/Heapsort

那里有一些伪代码可以提供帮助,你可能需要重新排列它以获得最低值,但这应该适合你。否则,您可以查看堆冒泡并在每个阶段应用它,而不是完全重新组织堆。

http://en.wikipedia.org/wiki/Binary_heap

它们在这里描述起来有点复杂,但上/下堆冒泡将确保您的堆正确组织。同样值得注意的是,对于最坏的情况,一个堆将在O(n log n)运行,而对于大多数操作,冒泡是O(log n)。