我有一个互连边缘列表(E
),如何找到从一个顶点连接到另一个顶点的最短路径?
我正在考虑使用lowest common ancestors,但边缘没有明确定义的根,所以我认为解决方案不起作用。
最短路径由遍历的最小顶点数定义。
注意:可能存在连接两个顶点的多路径,因此显然广度优先搜索不起作用
答案 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。有一些有趣的算法已经实现了你需要的东西,你可以选择最适合的。