【问题标题】:Finding diameter of graph using BFS使用 BFS 查找图形的直径
【发布时间】:2017-09-22 13:00:32
【问题描述】:

求图形直径的算法如下:

  1. 在任意任意顶点上运行 BFS 并记住最后访问的节点(比如 t)
  2. 从 t 运行 BFS 并记住最后访问的节点(比如 t')
  3. t 和 t' 之间的最短距离将是图形的直径。

这是我学到的,在我找到下图之前效果很好:

A------G-----C------D  
|  
E------F------B

如果我从 A 运行 BFS,我会得到 AGECF"DB"...,而从 B 运行的 BFS 会得到 BFCEDGA....so d(B,A)=3 应该是直径。

但是如果我从 A 运行 BFS 为 AGECF"BD" 而不是从 D 运行 BFS 得到 DCBGFAEd(D,E) = 4 应该是直径

出了什么问题?这个算法不是一直有效吗?

【问题讨论】:

    标签: graph-theory breadth-first-search


    【解决方案1】:

    只有当您想找到无环树的直径时,您的算法才有效。如果要求图的直径,可以使用Floyd-Warshall的全对最短路径算法。然后遍历整个距离矩阵,就可以得到图的直径了。

    【讨论】:

      【解决方案2】:

      很遗憾,您的算法不正确。看看这里的讨论:

      https://cs.stackexchange.com/questions/194/the-time-complexity-of-finding-the-diameter-of-a-graph

      一般来说,如果您想保证图的直径,您需要对每个状态进行 BFS(加权图中的 Dijkstra),然后在所有搜索中取最大值。 (或者计算所有对的最短路径信息并从该数据中找到最长的最短路径。)

      如果你在有向树中,或者在其他特殊情况下,你可以做得更好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 2016-05-16
        相关资源
        最近更新 更多