【问题标题】:Dijkstra's algorithm with an 2d-array具有二维数组的 Dijkstra 算法
【发布时间】:2023-03-30 14:50:02
【问题描述】:

在过去的几天里,我一直在尝试实现这个算法。到目前为止,我已经设法制作了一个动态二维数组并插入节点之间的距离,一个删除节点之间路径的函数以及一个告诉我两个节点之间是否存在路径的函数。 现在我想实现一个函数,它返回从节点 A 到节点 B 的最短路径。我知道 dijkstras 算法是如何工作的,并且我已经阅读了 wiki 上的伪代码,但我自己无法编写任何代码。我真的被困在这里了。

我一直在考虑代码应该是什么样子以及应该发生什么,这就是为什么我制作了那个告诉我两个节点之间是否存在路径的函数。我是否需要更多帮助功能来简化 dijkstras 的实施?

目前我只有 3 个节点,但我要编写的代码一般需要适用于 n 个节点。

感谢任何形式的帮助。

【问题讨论】:

    标签: c++ multidimensional-array dijkstra


    【解决方案1】:

    你可能想多了。

    你需要两件事。你理解的一个干净的图形结构。对您理解的算法的良好描述。 如果你两者都有。刚开始写一些代码。需要的帮手将在途中变得显而易见。

    -- 编辑--
    您可能需要以下一些数据结构
    std::vector std::list std::priority_queue

    【讨论】:

      【解决方案2】:

      我找到了这个算法的几个代码,但也许最好是最简单的一个,以便更好地理解它,所以你可以检查你的和这个之间的差异,并完成你的。以自己的方式编程总是更好。

      看看这个,看看它是否有帮助。

      http://vinodcse.wordpress.com/2006/05/19/code-for-dijkstras-algorithm-in-c-2/

      祝你好运。

      【讨论】:

      • 谢谢你的链接,我看看。
      【解决方案3】:

      编辑:代码已删除,我将给出提示:

      1. 将图形存储为每个顶点的邻接列表列表。 (类似vector < vector < pair<int,int> > > g (n);
      2. 使用一些数据结构来跟踪当前状态下距离最小的顶点是什么。 (可以设置,或者priority_queue 具有O(m log(n)) 复杂度)
      3. 每次选取 high_priority 顶点(当前距离最小的顶点),将其从数据结构中删除,并更新与已删除顶点相邻的距离。

      注意:如果您也想获得最小路径,请保留一些vector<int> previous,并且每次更新顶点距离时(比如v)设置previous[v] = index of vertex from where you came here。你的路径是last, prev[last], prev[prev[last]],...,first,顺序相反。

      【讨论】:

      • @Mihran - OP 清楚地将其标记为作业问题。放弃解决方案是非常糟糕的。相反,您应该给出如何进行的提示。
      • 感谢您的回复。问题是我从来没有使用过向量,所以我不知道如何使用它们。我可以用其他方式吗?现在我有一个 2d int 数组,其中包含节点之间的距离和一个包含城市(节点)的字符串数组。还提到了优先级队列,c++ 有一个“标准”容器吗?我只知道如何用列表实现 pq。
      • 优先队列是一个非常重要的数据结构——学习堆作为一个简单的例子。但是,暂时不要理会它们(特别是因为您现在正在尝试处理向量)。在 Dijkstra 中,您需要能够有效地重新计算队列中的项目,而“标准”堆操作(在 STL 算法包中)仅处理插入和删除。但是堆非常简单,所以(只要你使用第二个向量来允许快速访问堆中的节点,并适当地维护它)你可以自己制作起泡和消泡过程。
      • 我真的不确定如何使用我尝试用数组修复它的向量。这是我得到的,不知道它是否正确。 link 不知道为什么格式化如此糟糕。
      • @ogward 你能发布你的代码吗?我会检查它并告诉问题出在哪里。
      猜你喜欢
      • 2010-10-30
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多