简体   繁体   中英

Shortest path in an adjacency list in non-weighted graph

First, I would like to make sure I got the structure correct. As far as I know, an adjacency list representing a graph looks like this:

相邻列表

AdjList is an ArrayList, where each element is an object. Each object contains an ArrayList inside to represent vertices connected. So for example, in the image above, Vertext 1 (first index in the AdjList) is connected to the vertex at index 2, 4, and 5 of the AdjList. Is this representation of an adjacency list correct? (ps: I know indices start at 0, i put 1 here for simplicity/ease).

If it is correct, which algorithm should I use to find the shortest path between two vertices?

There is no algorithm to give you just the shortest path between two vertices. You can use either:

  1. Dijkstra's algorithm to find the shortest path between one vertex and all the others (and then choose the one you need).
  2. Roy-Floyd algorithm to find the shortest path between all possible pairs of vertices.

The links also include pseudocode.

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

You can use Dijkstra's and Floyd Warshall. For unweighed graph assume weight of each edge to be 1 and apply the algorithm.

Previous answers mention disjktra and floyd algorithms to resolve the problem and are valid solutions, but where the graph is unweighted, the best solution is use a BFS technique, simpler and optimal.

BFS has a algorithm complexity of O(n), while disjktra O(n * log(n)) and Floyd O(n^2)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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