【问题标题】:Find the shortest Path between two nodes (vertices)找到两个节点(顶点)之间的最短路径
【发布时间】:2009-11-02 05:30:41
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请注意,最低的共同祖先需要一棵树,这意味着任何两个节点之间只有一条路径。在这种情况下,找到最短路径是微不足道的。
  • 我不明白使用 BFS 有多条可能的路径是如何失败的。 BFS 从图中的单个节点找到最短路径,前提是所有边都未加权/具有相同的权重。该图不必是 BFS 工作的树。

标签: algorithm data-structures graph shortest-path


【解决方案1】:

Dijkstra 的算法会为您做到这一点。

【讨论】:

  • 仅当边缘被加权时才需要。
  • 我忘了...我以为他的边图是权重。
  • 如果没有加权,简单地假设所有边的权重为 1。仍然是一个很好的解决方案。
【解决方案2】:

我不确定您是否需要在每对 对节点之间或在两个特定 节点之间设置路径。既然有人已经给出了针对前者的答案,我将针对后者。

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

【讨论】:

  • bfs 会告诉我两个节点之间的路径;但它不能告诉我哪条路径最短。
  • 糟糕,BFS 为您提供了未加权边缘的最短路径。
【解决方案3】:

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

【讨论】:

    【解决方案4】:
    Shortest path is defined by the minimum number of vertexes treversed
    

    等于最小边数加一。

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

    【讨论】:

      【解决方案5】:

      额外 2 美分。看看networkx。已经针对您的需要实施了一些有趣的算法,您可以选择最适合的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 2016-03-04
        • 2021-12-18
        • 2023-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多