【发布时间】:2014-01-17 19:21:09
【问题描述】:
我尝试了以下方法:
1) DFS,跟踪我的 DFS 树中每个顶点的级别
2) 每次看到一个后边(x,y),我计算循环长度=level[x] - level[y] + 1,如果小于最短则保存
有人可以举一个反例说明这种方法是错误的吗?
在无向图中找到最短循环的更好方法是什么?
谢谢。
【问题讨论】:
-
这个过程应该可以正常工作。顺便说一句,如果图的节点太少,你也可以用 Floyd-Warshall 算法找到最小的循环(实现传递闭包矩阵)但是 Floyd Warshall 算法需要 O(V^3) 计算时间,而 DFS 只需要 O( V+E)
-
@Fallen 我认为这也可以,直到我在 Dasgupta 发现一个问题,询问为什么相同的方法是错误的并要求提供反例;所以这绝对不应该是正确的。这是我找到的问题的链接(请看最后的练习 4.4):cs.berkeley.edu/~vazirani/algorithms/chap4.pdf
-
我错过了 DFS 树,抱歉。恕我直言,BFS 树应该可以正常工作。在 DFS 方式中,可以在较短的路径之前访问较长的路径。
标签: algorithm data-structures graph