Python中的Union Find算法

时间:2016-09-02 10:42:10

标签: python-2.7

我正在尝试在python中实现Union Find算法,我不明白我的代码有什么问题,因为一切似乎都在正确的位置。

请帮助这方面。以下是我的代码

class UnionFind:
    def __init__(self,v):
        self.parent = [-1 for i in range(v)]
        self.lis=[]

    def addEdge(self,i,j):
        self.lis.append([i,j])

    def findParent(self,i):
        if self.parent[i] == -1:
            return i
        else :
            self.findParent(self.parent[i])

    def union(self,i,j):
        self.parent[i]=j

    def printResult(self):
        print self.lis

    def isBool(self):
        for lisIter in self.lis:
            x=self.findParent(lisIter[0])
            y=self.findParent(lisIter[1])
            if(x==y):
                return True
            self.union(x,y)
        return False


uf = UnionFind(3)
uf.addEdge(0,1)
uf.addEdge(1,2)
uf.addEdge(2,0)
if uf.isBool():
    print "The graph is cyclic"
else:
    print "The graph is not cyclic"

1 个答案:

答案 0 :(得分:0)

最后,我得到了我在代码中遗漏的那个小逻辑。我需要在findParent方法的else块中添加return语句,否则返回的值将被丢弃并返回一个none值。 UFF!

def findParent(self,i):
        if self.parent[i] == -1:
            return i
        else :
            return self.findParent(self.parent[i])