package 并查集;
import java.util.Scanner;
public class 并查集 {
//英文名字叫Disjoint Set,作用检查一个图是否存在一个环
//将代表父节点的数组parent[],每一个元素的值初始化为-1,代表每一个节点都是根节点,是一棵独立的树。
//rank数组表示树的高度,一开始一棵树只有一个节点则每棵树的高度都初始为0;
//有多少个节点一开始parent数组就有多少个元素,rank数组也就有多少个元素
public static void initialise(int parent[],int []rank) {
for(int i=0;i<parent.length;i++) {
parent[i]=-1;
rank[i]=0;
}
}
public static int find_root(int x,int[]parent) {
int x_root=x;
while(parent[x_root]!=-1) {
x_root=parent[x_root];
}
return x_root;
}
//返回1则表示union successfully 如果返回值为0,则表示x和y原来就在一个树中了,再加上x和y这一条边就会,
//形成一个环则表示union failed
public static int union_vertices(int x,int y,int []parent,int []rank) {
int x_root=find_root(x,parent);
int y_root=find_root(y,parent);
if(x_root==y_root) {
return 0;
}
else {
if(rank[x_root]>rank[y_root]) {
parent[y_root]=x_root;
}
else
并查集 Disjoint Set 检查图中是否有环
最新推荐文章于 2023-05-10 23:04:04 发布
本文详细介绍了如何利用并查集(Disjoint Set)数据结构来检测图中是否存在环。通过介绍并查集的基本操作,如Find和Union,结合图的遍历,可以高效地判断一个图是否为有向无环图(DAG)或存在环。
摘要由CSDN通过智能技术生成