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
}

SyntaxError
199 声望20 粉丝