无向图中的循环数

Posted

技术标签:

【中文标题】无向图中的循环数【英文标题】:Number Of Cycles In a Undirected Graph 【发布时间】:2017-04-22 10:09:18 【问题描述】:

问题如标题所示,图表以邻接表形式给出。我的方法是在任何一个顶点中调用 DFS,每当我在 DFS 递归步骤中遇到访问的顶点时,我都会从 0 开始递增全局变量的计数器,并且不为该访问的顶点调用 DFS(就像我们通常所做的那样)。这行得通吗,我想对了吗?我也没有在互联网上找到任何相关文章来了解#Number of Cycles in undirected graph。

详细说明:我的意思是使用简单的 DFS 方法。虽然我们在遇到访问顶点的递归步骤中什么都不做,但我增加了counter 全局变量值以应对这种情况。我这样做是因为每当我遇到访问过的顶点时,就意味着我正在完成一个循环。我声称:在任何 DFS 运行中,图中的每个循环都只会遇到一次(至少和最多一次)。我的说法正确吗?

编辑:没有后边缘

【问题讨论】:

我假设您的意思是 simple 周期数?另外,请提供更多详细信息,根据我对您建议的理解,您还将在发现交叉边缘时增加 是的,我的意思是简单的循环。请参阅问题中的详细说明。 Finding all cycles in undirected graphs. 感谢@Dukeling 【参考方案1】:

我很抱歉为我的答案本身发布答案,只是为了那些将来有类似疑问的人:我发现我会重复计算许多周期,例如:-

    A 
  /   \
B ----- C
  \   /
    D

从 A->B->C->D 开始 DFS 我得到循环 C-B-D 计数两次。我还了解到在无向图中查找所有循环的问题是 np-hard。倒霉:'(

【讨论】:

I am sorry to post answer to my answer itself 别这样。很好:***.com/help/self-answer

以上是关于无向图中的循环数的主要内容,如果未能解决你的问题,请参考以下文章

循环有向图和无向图

在无向图中查找多边形

在没有树边的无向图中循环?

c_cpp 检测无向图中的循环

无向图中求两定点之间所有路径。图用二维数组存储。最好用c语言、给我解题思路也行。谢谢

《离散数学》——图论6.7