Algorithm 循环有向图和无向图

Algorithm 循环有向图和无向图,algorithm,graph,directed-acyclic-graphs,cyclic-graph,Algorithm,Graph,Directed Acyclic Graphs,Cyclic Graph,如何检测循环中的循环 有向图 无向图 对于无向图。。我想到的算法之一是使用不相交集 对于G中的每个顶点v 制作套装(五) 对于G中的每条边e(u,v)逐个取下 如果查找集(u)=查找集(v) 返回真//循环存在 返回错误 对于无向顶点,只是:如果一条边指向一个已经访问过的顶点,那么就有一个循环 对于有向图,请看一看。在无向图中查找循环的方法应如下所示: 对于G中的每个顶点v Meke集合(v) 对于G中的每条边e(u,v)逐个取下 如果查找集(u)=查找集(v) 返回真值

如何检测循环中的循环

  • 有向图
  • 无向图
  • 对于无向图。。我想到的算法之一是使用不相交集

    • 对于G中的每个顶点v
      • 制作套装(五)
    • 对于G中的每条边e(u,v)逐个取下
      • 如果查找集(u)=查找集(v)
        • 返回真//循环存在
    • 返回错误

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


    对于有向图,请看一看。

    在无向图中查找循环的方法应如下所示:

    • 对于G中的每个顶点v
      • Meke集合(v)
    • 对于G中的每条边e(u,v)逐个取下
      • 如果查找集(u)=查找集(v)
        • 返回真值
      • 并集(u,v)
    • 返回错误

    对于有向图,应使用获取图中强组件的数量。然后,可以检查强连接的零部件编号是否等于顶点编号。因为如果在有向图中有一个圈,那么在相同的强连通组件中至少有两个顶点。这意味着,如果有向图有一个循环,则强连接组件的总数应小于顶点的数量。

    您的方法称为联合查找,是的,它可以用于在无向图中查找循环。或者,只需进行DFS测试,看看您以前是否遇到过节点。对于有向图,请使用修改后的DFS跟踪您在当前探索期间看到的内容,并在从DFS回滚时标记未访问的内容。和可能重复。我找不到一个关于堆栈溢出的不相交集合循环检测的好链接,但是。你显然试图自己解决(部分)这个问题,所以可能不值得投反对票,但是,我个人认为,在问问题之前,你也应该做谷歌搜索。