我应该如何使用链表找到图中的最短路径

How should I find the shortest path in the graph using linked list

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

根据图,我们可以画出邻接矩阵,它是一个二维数组,A[0][0]...A[n-1][n-1]。所以,问题是如何return最短路径。如果没有路径,应该return空路径。并且路径应该return使用链表。

 |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 方法会很棒。

我相信 this 文章回答了您的问题。这个问题可以用Dijkstra算法解决。在您的情况下,每条边的权重等于 1,因此只需在伪代码中创建 dist_between(u,v) = 1 即可。解决方案的时间复杂度为 O(V^2)。注意, previous[v]= 从起始节点到节点v的最短路径中第v个节点之前的节点。 也就是说,要想以最短的路径访问到第v个节点,就必须先到达previous [v]节点。所以使用这个 previous 数组,你可以 return 以任何你想要的方式得到最短路径。如果没有路径,伪代码中的dist[v]就会无穷大