循环定向和无向图

时间:2014-04-14 18:17:40

标签: algorithm graph directed-acyclic-graphs cyclic-graph

如何检测

中的循环
  1. 有向图
  2. 无向图。
  3. 对于无向图..我想到的算法之一是使用不相交的集。

    • 表示G中的每个顶点v
      • 请集(V)
    • 对于G中的每个边e(u,v)逐个采取
      • 如果Find-set(u)== Find-set(v)
        • return true //循环存在
    • return false

2 个答案:

答案 0 :(得分:0)

对于无向的,只有use a DFS:如果一个边指向已经访问过的顶点,那么就有一个循环。

对于有针对性的人,请查看at this question

答案 1 :(得分:0)

在无向图中查找循环的方法应该是这样的:

  • 表示G中的每个顶点v
    • Meke集(V)
  • 对于G中的每个边e(u,v)逐个采取
    • 如果Find-set(u)== Find-set(v)
      • return true
    • Union-set(u,v)
  • return false

对于有向图,您应该使用Tarjan's strongly connected components algorithm来获取图中强组分的数量。然后,您可以检查强连接组件编号是否等于顶点编号。因为如果有向图中存在循环,则在相同的强连接组件中至少存在两个顶点。这意味着如果有向图具有循环,则强连接组件的总数应小于顶点数。