var findCircleNum = function(M) {
var UF = Array.from({length: M.length}, (v, i) => i); 构建树
function uncion(q,p){
while(UF[q]!=q){
q = UF[q];//查根
}
while(UF[p]!=p){
p = UF[p];//查根
}
if(p ==q){
return false
}else{
return true
}
}
function connect(q,p){ // 其实应该按chilren的长度判定谁向谁归并
var chilren = [];
while(UF[q]!=q){
chilren.push[q]//记录子节点
q = UF[q];//向根回溯
}
chilren.map((v)=>{UF[v] = q})//压缩树
chilren = []
while(UF[p]!=p){
chilren.push[p]//归并两棵树
p = UF[p];
}
chilren.map((v)=>{UF[v] = q})
UF[p] = q
return;
}
for(var i = 0;i<M.length;i++){
for(var j =0;j<M.length;j++){
if(M[i][j]){//连通
if(uncion(UF[i],UF[j])){//判定是否不连通
connect(UF[i],UF[j])//进行连通
}
}
}
}
var num = 0;
UF.map((v,i)=>{
if(v==i){//查找最后树的数量
num++
}
})
return num
};