并查集模板

来源:互联网 发布:linux tomcat线程挂起 编辑:程序博客网 时间:2024/06/14 12:22
#include <stdio.h>const int MAX_N = 8;int par[MAX_N];//父亲 int rank[MAX_N];//树的高度 //初始化n个元素void init(int n){for(int i = 0;i < n;i ++) {par[i] = i;rank[i] = 0;} } //查询树的根 int find(int x){if(par[x] == x) {return x;} else {//递归找到树的根 return par[x] = find(par[x]);}} //合并x和y所属的集合 void unite(int x, int y){ x = find(x);y = find(y);if(x == y)return ;if(rank[x] < rank[y]){par[x] = y;} else {par[y] = x;if(rank[x] == rank[y])rank[x] ++;}}//判断x和y是否属于同一个集合 bool same(int x,int y){return find(x) == find(y);}int main() {int n = 7;init(n);printf("par:");for(int i = 0;i < n;i ++) {printf("%d ", par[i]);} printf("\n");unite(1, 3);unite(2, 4);unite(1, 2);unite(5, 6);unite(6, 1);printf("ran:");for(int i = 0;i < n;i ++) {printf("%d ", rank[i]);} printf("\n");printf("par:");for(int i = 0;i < n;i ++) {printf("%d ", par[i]);} printf("\n");return 0;}

0 0
原创粉丝点击