【问题标题】:Using Strongly Connected Components Algo as Cycle Detection使用强连通分量算法作为循环检测
【发布时间】:2012-10-18 16:54:29
【问题描述】:

我理解,如果一组顶点是强连接组件的一部分,那么组件内的所有这些顶点都可以相互连接;一个循环。

现在,我想利用这个事实并声称如果图 G = (V,E) 有一个循环,那么该循环必须在 scc 内。

换句话说,所有循环都必须是 scc 的一部分(我的主张)。

我想不出任何反例来反驳我的主张,所以我想知道图中是否有任何不属于 scc 的循环。
或者 我的主张对吗?

【问题讨论】:

    标签: algorithm graph


    【解决方案1】:

    没错。如果一组顶点在一个循环中,那么它们都可以相互访问(通过绕过循环),因此根据定义,它们是一个 SCC。

    话虽如此,这不完全是编程问题:)

    【讨论】:

    • 谢谢。好吧,我知道如果它是 SCC,那么它就是一个循环。但我问的是 SCC 算法是否捕获图表中的所有周期或少数几个周期。就像如果你是一只德国牧羊犬,那么你就是一只狗。但如果你是一只狗,那并不意味着你是一只德国牧羊犬。我的比喻
    • 我的回答措辞准确:如果一组顶点在一个循环中,那么它们在一个 SCC 中。你问的不是这个吗?我还能怎么说?
    • 不,你是对的。 “如果一组顶点在一个循环中,那么它们就在一个 SCC 中。” (单数)。我只是想确保图中的所有 CYCLES 都是 SCC,因为“如果一组顶点在一个循环中,那么它们就在一个 SCC 中。”我想知道是否会有这样的情况,它是一个循环但没有被 SCC 捕获。你说没有。好的谢谢!我需要什么
    • 这显然是错误的。
    • @antz,什么是假的?一个循环必须在一个scc中?或者发现 scc 是循环检测的最佳算法?循环必须在 scc 中,但您可以更快地直接检测循环(除非您有很多形式为“此图中是否存在包含 x 和 y 的循环?”的查询)。不过,这不是你的问题。
    【解决方案2】:

    设 e = (u, v) 为有问题的边。我们注意到这是 G 中包含 e 当且仅 如果 u 连接到 G{e} 中的 v。 我们的算法只是在 G{e} 上从 u 运行 DFS,如果 v 可以从 u 到达,则输出 yes 没有别的。 该算法在线性时间中运行,因为 DFS 在线性时间中运行(我们只运行部分 DFS 算法找到包含 u) 的组件。这个算法显然是正确的。 如果 u 通过某个路径 p 连接到 G{e} 中的 v,我们可以将边 e 添加到 p 以形成一个循环。 否则,从 G 中删除 e 会断开 u 和 v。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2012-06-18
      • 2011-11-15
      相关资源
      最近更新 更多