如何使用不相交集检测无向图中的循环?

时间:2017-04-16 14:44:41

标签: algorithm graph cycle disjoint-sets disjoint-union

算法

For each edge (u, v) in the Adjacency list:
If u and v do not belong to the same set:
   Union(u, v)
else:
  return true // cycle detected
return false

图形

(1)-------(2)

邻接列表

[1] - > [2]

[2] - > [1]

不相交集合

{{1},{2}}

迭代1

边缘e =(1,2)

联盟(1,2)

不相交集= {{1,2}}

迭代2

边缘e =(2,1)

2和1都属于同一组,因此算法检测到一个循环。 很明显,图表不包含循环。

该算法可以完美地用于有向图。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

循环必须有明显的边缘!在联合查找算法中,您遍历所有边。您需要从邻接列表中筛选出重复的边。在您的情况下,只有一次迭代,因此它将返回false。