Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用强连通分量Algo作为周期检测_Algorithm_Graph - Fatal编程技术网

Algorithm 使用强连通分量Algo作为周期检测

Algorithm 使用强连通分量Algo作为周期检测,algorithm,graph,Algorithm,Graph,我知道,如果一组顶点是强连接组件的一部分,那么组件中的所有顶点都可以彼此接触;一个循环 现在,我想使用这个事实,并声称如果一个图G=(V,E)有一个圈,那么这个圈必须在scc内 换句话说,所有循环必须是scc(我的索赔)的一部分 我想不出任何反例来反驳我的观点,所以我想知道在一个图中是否有任何循环不是scc的一部分。 或 我的要求正确吗 没错。如果一组顶点在一个循环中,那么它们彼此都是可到达的(通过循环),因此根据定义它们是SCC 话虽如此,这并不完全是一个编程问题:)让e=(u,v)成为问题的

我知道,如果一组顶点是强连接组件的一部分,那么组件中的所有顶点都可以彼此接触;一个循环

现在,我想使用这个事实,并声称如果一个图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。

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