Algo找到图的直径如下:
这是我学到的东西,它工作正常,直到我找到以下图表:
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,而DCBGFAE
,则d(D,E) = 4
应为直径
出了什么问题?这个算法不总是有效吗?
答案 0 :(得分:2)
只有在想要找到非循环树的直径时,您的算法才有效。如果要查找图表的直径,可以使用Floyd-Warshall的所有对最短路径算法。然后遍历整个距离矩阵,你可以找到图的直径。
答案 1 :(得分:1)
不幸的是,您的算法不正确。看看这里的讨论:
https://cs.stackexchange.com/questions/194/the-time-complexity-of-finding-the-diameter-of-a-graph
一般来说,如果你想保证图形的直径,你需要从每个状态做一个BFS(加权图中的Dijkstra),然后在所有搜索中取最大值。 (或计算所有对最短路径信息,并从该数据中找出最长的最短路径。)
如果您在有向树或其他特殊情况下,您可以做得更好。