繁体   English   中英

非加权图中邻接表中的最短路径

[英]Shortest path in an adjacency list in non-weighted graph

首先,我想确保我的结构正确。 据我所知,表示图形的邻接列表如下所示:

相邻列表

AdjList 是一个 ArrayList,其中每个元素都是一个对象。 每个对象内部都包含一个 ArrayList 来表示连接的顶点。 例如,在上图中,Vertext 1(AdjList 中的第一个索引)连接到 AdjList 索引 2、4 和 5 处的顶点。 邻接表的这种表示是否正确? (ps:我知道索引从 0 开始,为了简单/方便,我在这里放了 1)。

如果正确,我应该使用哪种算法来找到两个顶点之间的最短路径?

没有算法可以给您两个顶点之间的最短路径。 您可以使用以下任一方法:

  1. Dijkstra的算法可找到一个顶点与所有其他顶点之间的最短路径(然后选择所需的一个)。
  2. Roy-Floyd算法可找到所有可能的顶点对之间的最短路径。

链接还包括伪代码。

这是Dijkstra最短路径算法在Java中的示例及其解释

您可以使用Dijkstra和Floyd Warshall。 对于未称重的图,假定每个边的权重为1并应用算法。

以前的答案提到了 disjktra 和 floyd 算法来解决问题并且是有效的解决方案,但是在图形未加权的情况下,最好的解决方案是使用BFS技术,更简单和最优。

BFS 的算法复杂度为 O(n),而 disjktra O(n * log(n)) 和 Floyd O(n^2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM