找到两个节点(顶点)之间的最短路径

时间:2009-11-02 05:30:42

标签: algorithm data-structures graph shortest-path

我有一个互连边缘列表(E),如何找到从一个顶点连接到另一个顶点的最短路径?

我正在考虑使用lowest common ancestors,但边缘没有明确定义的根,所以我认为解决方案不起作用。

最短路径由遍历的最小顶点数定义。

注意:可能存在连接两个顶点的多路径,因此显然广度优先搜索不起作用

5 个答案:

答案 0 :(得分:9)

Dijkstra的算法将为您完成此操作。

答案 1 :(得分:8)

我不确定您是否需要每个节点对之间或两个特定节点之间的路径。由于某人已经给出了解决前者的答案,我将解决后者问题。

如果您没有关于图表的任何先验知识(如果您这样做,您可以使用基于启发式的搜索,例如A*),那么您应该使用breadth-first search

答案 2 :(得分:2)

Floyd-Warshall算法可能是您问题的可能解决方案,但也有other solutions来解决所有对最短路径问题。

答案 3 :(得分:1)

Shortest path is defined by the minimum number of vertexes treversed

它与最小边数加1相同。

你可以使用标准广度优先搜索,它会正常工作。如果你有多个连接两个顶点的路径,只需保存其中一个,它就不会影响任何东西,因为每条边的权重都是1。

答案 4 :(得分:0)

额外2美分。看看networkx。有一些有趣的算法已经实现了你需要的东西,你可以选择最适合的。