检测图中的周期

时间:2011-03-01 14:18:38

标签: algorithm graph graph-theory

  

可能重复:
  Finding all cycles in graph

任何人都可以给我教程,算法,...用于图中的检测周期吗?

我找到了几种算法并实现了它们但没有检测到所有循环

strongly_connected_components_algorithm

3 个答案:

答案 0 :(得分:1)

从更多的数学观点来看:

输入:图G =(V,E)

  1. 假设您的图形不是不相交的(每两个顶点之间存在一条路径)

  2. 计算图表的spanning tree T(有简单的算法可以做到这一点)

  3. 设E'是E的子集,不属于生成树T.对于E'中的每个边e,它对树的添加只创建一个循环。让我们把所有这些周期都放到集合B中。

  4. 我们在图表中定义了binary cycle space个周期。在该空间中,可以添加两个循环。添加只是边缘的唯一总和。

  5. 循环组B是“循环基础”。图表中的每个其他周期都可以形成为周期B的线性组合。

  6. 这样您就可以在图表中获得所有可能的周期。

    警告:如果您的输入图表有 v 顶点和 e 边缘,则有2 ^( e - v +1)-1个不同的周期!这是非常多的 - 你可能不想明确地写下所有这些。

答案 1 :(得分:0)

BFS alg。也行。我相信它比DFS更容易实现,因为它将访问/访问节点保持在队列中。检查是否已经访问过某些节点会更容易。

答案 2 :(得分:-2)

我认为DFS会完成你的工作因为我们标记了访问过的节点,如果我们再次发现该节点就有一个循环