Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何使用链表在图中找到最短路径_Algorithm_Graph_Linked List_Pseudocode - Fatal编程技术网

Algorithm 如何使用链表在图中找到最短路径

Algorithm 如何使用链表在图中找到最短路径,algorithm,graph,linked-list,pseudocode,Algorithm,Graph,Linked List,Pseudocode,有n个节点,如果直接连接,则节点之间有边。 每条边没有权重和方向(如果节点a和b连接,则表示双向连接,而不是单向连接) 基于该图,我们可以绘制二维数组的邻接矩阵,A[0][0]…A[n-1][n-1]。因此,问题是如何返回最短路径。如果没有路径,则应返回空路径。路径应该使用链表返回 |A B C D E A|0 1 0 1 0 B|1 0 1 0 0 C|0 1 0 1 0 D|1 0 1 0 1 E|0 0 0 1 0 因此,根据上面的矩阵,从C到E的最短路径是[C,D,E]。从A到C的

有n个节点,如果直接连接,则节点之间有边。 每条边没有权重和方向(如果节点a和b连接,则表示双向连接,而不是单向连接)

基于该图,我们可以绘制二维数组的邻接矩阵,A[0][0]…A[n-1][n-1]。因此,问题是如何返回最短路径。如果没有路径,则应返回空路径。路径应该使用链表返回

 |A B C D E
A|0 1 0 1 0
B|1 0 1 0 0 
C|0 1 0 1 0
D|1 0 1 0 1
E|0 0 0 1 0
因此,根据上面的矩阵,从C到E的最短路径是[C,D,E]。从A到C的最短路径是[A,B,C]

我们应该使用时间复杂度为O(n^2)的伪代码。我简单地猜测BFS方法会很好。

我相信这篇文章回答了你们的问题。这个问题可以用Dijkstra算法解决。在您的例子中,每条边的权重等于1,因此只需在伪代码中设置(u,v)=1之间的距离。解的时间复杂度为O(V^2)。请注意,
previous[v]
=从起始节点到节点v的最短路径中第vth节点之前的节点。
这意味着,为了以尽可能短的方式访问vth节点,您必须首先访问
previous[v]
节点。因此,使用这个
previous
数组,您可以以任何方式返回最短路径。如果没有路径,伪代码中的
dist[v]
将是无穷大。

树在两个节点之间总是有一条路径。这实际上是树的定义:树是一个图形,其中每两个顶点通过一条路径连接。所以树上的“最短”路径没有多大意义。@Will你是对的。我刚刚删除了树散列标记。要在未加权图中找到两个节点之间的最短路径,您可以使用BFS,互联网上甚至维基百科上都有大量的伪代码示例!谢谢你的回答。