【问题标题】:How can Dikjstra find the shortest path in this graph?Dijkstra 如何在此图中找到最短路径?
【发布时间】:2019-06-16 02:30:07
【问题描述】:

如果我们必须找到从 0 到 3 的最短路径,我无法理解 Dijkstra 如何在下图中找到最短路径(根据我的理解它的工作方式):https://graphonline.ru/tmp/saved/SH/SHBqKyENwJqcCJGM.png

如果算法从0中选择最小的权重并将0标记为已访问,那么它不会选择节点1然后选择节点3吗?它会如何选择节点 2?

【问题讨论】:

  • "找到从0到1的最短路径:"你的意思是从0 to 3吗?

标签: algorithm dijkstra


【解决方案1】:

Dijkstra 的算法涉及一个优先级队列,其中保留了从被访问节点可直接到达的所有节点,以及它们到起始节点的距离。

算法会访问节点0,并将节点1和2加入优先队列。然后它将访问节点1,因为它是优先级队列中最近的节点,并将节点3添加到距离为6的优先级队列中。节点2仍在队列中,并且由于它比节点3更接近节点0 ,接下来会访问它。当访问节点2时,会找到到节点3的长度为4的较短路径,因此到节点3的距离将更新为4。然后访问节点3。

【讨论】:

    【解决方案2】:

    基本上,Dijkstra 只能用于确定给定加权图中从一个源节点到同一图数据结构中的每个其他节点的最短路径,前提是这些节点可以从源节点到达。 该算法一直运行,直到它访问了图中的所有顶点。不断查找和更新最短路径。

    也许这个链接将有助于更好地理解算法本身。 https://medium.com/basecs/finding-the-shortest-path-with-a-little-help-from-dijkstra-613149fbdc8e

    【讨论】:

      【解决方案3】:

      据我了解,该算法会在选择下一个要访问的顶点之前重新计算相邻的未访问顶点的暂定距离。当你在 1 时,首先重新计算其相邻未访问顶点的暂定距离,在本例中为 3。然后选择暂定距离最短的未访问节点,在本例中为 2,并访问该节点。

      【讨论】:

        猜你喜欢
        • 2014-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        • 1970-01-01
        • 2015-05-19
        相关资源
        最近更新 更多