【发布时间】:2014-04-14 18:17:39
【问题描述】:
如何检测循环中的循环
- 有向图
- 无向图。
对于无向图.. 我想到的一种算法是使用不相交集。
- 对于 G 中的每个顶点 v
- 制作组(v)
- 对于 G 中的每个边 e(u,v) 一个接一个
- 如果查找集(u) == 查找集(v)
- return true // 循环存在
- 如果查找集(u) == 查找集(v)
- 返回假
【问题讨论】:
-
您的方法称为 union-find,是的,它可用于在无向图中查找循环。或者,只需执行 DFS 并查看您之前是否遇到过节点。对于有向图,使用修改后的 DFS 来跟踪您在当前探索期间查看的内容,并在您从 DFS 回滚时标记未访问的内容。
-
Cycles in an Undirected Graph 和 Best algorithm for detecting cycles in a directed graph 的可能重复项。我在 Stack Overflow 上找不到不相交集循环检测的好链接,但 that works.
-
您显然试图自己解决(部分)问题,因此可能不值得投反对票,但就个人而言,我认为您在提问之前也应该始终进行 Google 搜索。
标签: algorithm graph directed-acyclic-graphs cyclic-graph