1、并查集是一种树形结构,用户处理不相交数据的合并和查询问题。
2.、并查集操作:
a,find 查询是否是同一颗数
b,树合并
3、算法模板
# 递归查parent,并赋值 def find(self, i, relation): if not relation[i] == i: relation[i] = self.find(relation[i], relation) return relation[i] # 合并操作,约定取值较小者 def union(self, i, j, relation): re_i = self.find(i, relation) re_j = self.find(j, relation) if re_i < re_j: relation[re_j] = re_i elif re_i > re_j: relation[re_i] = re_j
1、对关系,遍历执行 union操作
2、然后针对关系list,执行find,让所有元素找到最终的parent
3、例题
https://leetcode-cn.com/problems/friend-circles/
class Solution: def find(self, i, relation): if not relation[i] == i: relation[i] = self.find(relation[i], relation) return relation[i] def union(self, i, j, relation): re_i = self.find(i, relation) re_j = self.find(j, relation) if re_i < re_j: relation[re_j] = re_i elif re_i > re_j: relation[re_i] = re_j def findCircleNum(self, M: List[List[int]]) -> int: M_len = len(M[0]) relation = [i for i in range(M_len)] for i in range(M_len): for j in range(i + 1, M_len): if M[i][j] == 1: self.union(i, j, relation) print(relation) for i in range(len(M)): self.find(i, relation) return len(set(relation))
https://blog.csdn.net/qq_41593380/article/details/81146850
https://blog.csdn.net/yangrujing/article/details/51868630
原文:https://www.cnblogs.com/pyclq/p/12829171.html