记录一下 并查集
的 js
类写法
class UnionFind {
constructor(size) {
this.fa = [];
this.size = size;
this.init();
}
// 初始化 每个元素的父节点为自身
init() {
for(let i = 0; i < this.size; i++) {
this.fa[i] = i;
}
}
// 递归找到根节点,同时进行路径压缩
find(x) {
if(x === this.fa[x]) {
return x;
}
this.fa[x] = this.find(this.fa[x]);
return this.fa[x];
}
// 合并 x, y 直到各自的根节点, 其中一个的指向另一个
merge(x, y) {
let fx = this.find(x);
let fy = this.find(y);
if(fx !== fy) {
this.fa[fx] = fy;
}
}
// 获取集合数量
getCount() {
let count = 0;
for(let i = 0; i < this.size; i++) {
if(this.fa[i] === i) {
count++;
}
}
return count;
}
}