当前位置: 首页 > 知识库问答 >
问题:

如何在dijkstra算法中保存最短路径

叶弘深
2023-03-14

所以首先让我们定义Dijkstra算法:
Dijkstra算法在具有非负边权重的有向图中找到单源最短路径。
我想知道如何用Dijkstra算法保存从s到t的最短路径。
我在谷歌上搜索,但是我找不到任何特别的东西;我也改变了Dijkstra算法,但是我找不到任何答案。如何使用Dijkstra保存从s到t的最短路径?
我知道我的问题是基本的和不专业的,但任何帮助将不胜感激。谢谢你考虑我的问题。

共有3个答案

仲孙才捷
2023-03-14

一种非常简单的方法是使用递归和“父数组”如果将所有点的父数组初始化为-1,然后在完成dijkstra的后更新父数组,则可以从任何点递归返回,直到到达源并打印出路径。下面是一个非常简短且易于理解的递归片段:

// Function to print shortest path from source to j using parent array
void path(parent array, int j)
{
    // Base Case : If j is source
    if (jth element of parent is -1) return;
 
    path(parent, jth element of parent);
    print j;
}

请注意,您可以将其存储在全局向量(或其他与C无关的语言的数据类型)中,以供以后使用,而不是将j打印出来。

伊富
2023-03-14

大多数使用此算法的库可能会为您提供一种方法。但一般来说,只需跟踪每个节点的路径即可。Ie为每个节点指定一个属性shortestPathToNode,在其中存储节点列表

薛祯
2023-03-14

如果您查看您提供的Wikipedia链接中的伪代码,您将看到一个名为prev[]的数组。对于图中的每个节点v,此数组包含源节点s和v之间最短路径中的前一个节点u。(此数组也称为前置或父数组。)

换句话说,s和v之间的最短路径为:

s -> u -> v
where u = prev[v]

从s到u的路径之间可能有几个节点,因此要重建从s到v的路径,只需使用主伪代码(目标是v)下面的代码片段沿着prev[]数组定义的路径返回即可:

1  S ← empty sequence
2  u ← target
3  while prev[u] is defined:                 // Construct the shortest path with a stack S
4      insert u at the beginning of S          // Push the vertex onto the stack
5      u ← prev[u]                             // Traverse from target to source
6  end while
 类似资料:
  • 我已经从Cormen的第三版参考“算法介绍”中找到的伪代码中实现了Dijkstra算法,用于单源最短路径问题。 我的实现是在python上使用链接列表在邻接列表表示中表示图形。这意味着节点列表是一个链接列表,每个节点都有一个链接列表来表示每个节点的边缘。此外,我没有实现或使用任何二进制堆或斐波那契堆作为算法所需的最小优先级队列,因此当过程需要提取与源距离最小的下一个节点时,我在节点链表内搜索O(V

  • 本文向大家介绍java实现Dijkstra最短路径算法,包括了java实现Dijkstra最短路径算法的使用技巧和注意事项,需要的朋友参考一下 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 Dijkstra一般的表述

  • 最短路径问题的Dijkstra算法 是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。 这个算法的python实现途径很多,网上能够发现不少。这里推荐一个我在网上看到的,本来打算自己写,看了这个,决定自己不写了,因为他的已经太好了。 解决(Python) #

  • 本文向大家介绍java实现dijkstra最短路径寻路算法,包括了java实现dijkstra最短路径寻路算法的使用技巧和注意事项,需要的朋友参考一下 【引用】迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。  它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 基本思想 通过Dijkstra计算图G中的最短路径时,需要指

  • 本文向大家介绍java实现最短路径算法之Dijkstra算法,包括了java实现最短路径算法之Dijkstra算法的使用技巧和注意事项,需要的朋友参考一下 前言 Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法。该算法被称为是“贪心算法”的成功典范。本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码。 一、知识准备: 1、表示图的数据结构 用于存储图的

  • 本文向大家介绍python实现Dijkstra算法的最短路径问题,包括了python实现Dijkstra算法的最短路径问题的使用技巧和注意事项,需要的朋友参考一下 迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法。 1 算法原理 迪杰斯特拉(Dijkstra)算法是一个按照路径长度递增的次序产生的最短路径算法。下图为带权值的有向图,作为程序中