不相交集(或联合查找)的Java程序| Set 1(检测无向图中的循环)
不相交集数据结构是跟踪一组元素的数据结构,这些元素被划分为多个不相交(非重叠)子集。 union-find 算法是一种对此类数据结构执行两个有用操作的算法:
查找:确定特定元素在哪个子集中。这可用于确定两个元素是否在同一个子集中。
联合:将两个子集连接成一个子集。
在这篇文章中,我们将讨论不相交集数据结构的应用。该应用程序是检查给定图形是否包含循环。
Union-Find 算法可用于检查无向图是否包含循环。请注意,我们已经讨论了一种检测循环的算法。这是基于Union-Find的另一种方法。此方法假定图形不包含任何自环。
我们可以跟踪一维数组中的子集,我们称它为 parent[]。
让我们考虑下图:
对于每条边,使用边的两个顶点制作子集。如果两个顶点都在同一个子集中,则找到一个循环。
最初,父数组的所有槽都初始化为-1(意味着每个子集中只有一项)。
0 1 2
-1 -1 -1
现在一一处理所有边。
边 0-1:找到顶点 0 和 1 所在的子集。由于它们在不同的子集中,我们采用它们的并集。要采用联合,请将节点 0 作为节点 1 的父节点,反之亦然。
0 1 2 Edge 1-2: 1 is in subset 1 and 2 is in subset 2. So, take union.
0 1 2 Edge 0-2: 0 is in subset 2 and 2 is also in subset 2. Hence, including this edge forms a cycle.How subset of 0 is same as 2?0->1->2 // 1 is parent of 0 and 2 is parent of 1
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。