【发布时间】:2012-10-18 16:54:29
【问题描述】:
我理解,如果一组顶点是强连接组件的一部分,那么组件内的所有这些顶点都可以相互连接;一个循环。
现在,我想利用这个事实并声称如果图 G = (V,E) 有一个循环,那么该循环必须在 scc 内。
换句话说,所有循环都必须是 scc 的一部分(我的主张)。
我想不出任何反例来反驳我的主张,所以我想知道图中是否有任何不属于 scc 的循环。
或者
我的主张对吗?
【问题讨论】:
我理解,如果一组顶点是强连接组件的一部分,那么组件内的所有这些顶点都可以相互连接;一个循环。
现在,我想利用这个事实并声称如果图 G = (V,E) 有一个循环,那么该循环必须在 scc 内。
换句话说,所有循环都必须是 scc 的一部分(我的主张)。
我想不出任何反例来反驳我的主张,所以我想知道图中是否有任何不属于 scc 的循环。
或者
我的主张对吗?
【问题讨论】:
没错。如果一组顶点在一个循环中,那么它们都可以相互访问(通过绕过循环),因此根据定义,它们是一个 SCC。
话虽如此,这不完全是编程问题:)
【讨论】:
设 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。
【讨论】: