type UnionFindSet struct {
set []int // 下标代表元素,值代表其父节点,两个值相等时,代表根节点
}
func NewUnionFindSet(cap int) *UnionFindSet {
temp := UnionFindSet{
set: make([]int, cap),
}
for i := 0; i < cap; i++ {
temp.set[i] = i
}
return &temp
}
// Union 合并两个set
func (u *UnionFindSet) Union(x, y int) {
// 先找到双方根节点,如果一样,那么不需要合并
rootX := u.Find(x)
rootY := u.Find(y)
if rootX == rootY {
return
}
u.set[rootX] = rootY
}
// Find 查看元素属于哪个集合
func (u *UnionFindSet) Find(x int) int {
for u.set[x] != x {
x = u.set[x]
}
return x
}
// IsConnected 连通性判断,判断两个元素是否属于同一个集合
func (u *UnionFindSet) IsConnected(x, y int) bool {
var tempX = u.Find(x)
var tempY = u.Find(y)
return tempX == tempY
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。