python 並查集代碼

class UnionFind(object):
    """並查集類"""

    def __init__(self, n):
        """長度爲n的並查集"""
        self.uf = [-1 for i in range(n + 1)] # 列表0位置空出
        self.sets_count = n  # 判斷並查集裏集合的數量

    def find(self, p):
        """查找p的根結點(祖先)"""
        r = p
        while self.uf[p] > 0:
            p = self.uf[p]
        while r != p:
            self.uf[r], r = p, self.uf[r]
        return p
    def union(self, p, q):
        """連通p,q 讓q指向p"""
        proot = self.find(p)
        qroot = self.fing(q)
        if proot == qroot:
            return
        if self.uf[proot] > self.uf[qroot]:
            self.uf[proot] = qroot
            self.uf[qroot] += self.uf[proot]
        else:
            self.uf[qroot] = proot
            self.uf[proot] += self.uf[qroot]

        self.sets_count -= 1



    def is_connected(self, p, q):
        """判斷pq是否已經連通"""
        if self.find(p) == self.find(q):
            return True
        else:
            return False


更多優質資源在我的公衆號“一個直男的救贖之路”:

mark

公衆號主要分享的知識包括:人工智能,計算機視覺,算法,編程語言學習(python,java,c/c++),大學生競賽,學習方法心得,好書推薦等,歡迎您一起交流和學習。公衆號也會經常分享一些優質資源和教學視頻,電子書等。
回覆以下內容,即可獲取千G學習資源!
--------
算法
人工智能
python
C語言
藍橋杯
--------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章