【问题标题】:Finding shortest path between nodes using Dijkstra's and min heap c++使用 Dijkstra 和 min heap c++​​ 查找节点之间的最短路径
【发布时间】:2013-04-16 22:03:32
【问题描述】:

这是一个更笼统的问题。我有一张将城市名称映射到其节点的地图(包含国家、纬度、经度等基本信息)。每个城市节点都有一个指向目标节点的边数组。边缘具有时间和成本成员。我想找到在两个节点之间旅行的最短时间,但我已经开始对最佳方式感到困惑。

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

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

谢谢!

【问题讨论】:

    标签: c++ heap dijkstra


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多