什么是并查集
并查集是一种树型的数据结构。
并查集的作用
- 处理不相交的集合的合并、查询问题。
- 检查一个图上面是否有一个环。
简单说就是先把每一个顶点放在一个独立的集合(树)里,如果顶点之间是邻接的那么就把他们合并为一个集合(树)。一个集合(树)里有一个根结点,如果有两个顶点他们的根结点相同说明他们处于同一个集合(树),那这两个结点邻接必定形成一个环(为什么? 因n个顶点和n-1条边形成的连通图如果再加一条边一定出现环)。如果他们的根结点不同,就把这两个集合合成一个集合。
操作步骤
- 建立一个parent数组并初始化 。parent数组的含义:parent[0] = 1代表0的父结点是1
- find_root函数查找顶点的根节点
- 如果两个顶点的根结点不一样合并
代码实现
int* makeparent () {
int parent[VERTICE];
int i;
for (i = 0; i < VERTICE; i++) {
parent[i] = -1;
}
return parent;
}
int find_root (int parent[], int f) {
while (parent[f] > 0)
f = parent[f];
return f;
}
void union_vertice (int x,int y) {
int n, m;
makeparent();
n = find_root (parent, x);
m = find_root (parent, y);
if (m != n) {
parent [n] = m;
}
}