def initListAndRank(length:int)->None:
#初始化节点数
global list1
#初始化深度数组
global rank
list1=[-1]*length
rank=[0]*length
def getRoot(idx:int,list1:list)->int:#
queue=[]
while list1[idx]!=-1:
queue.append(idx)
idx=list1[idx]
#剪枝
for x in queue:
list1[x]=idx
return idx
def unionNode(x:int,y:int,list1:list)->bool:
temp1=getRoot(x,list1)
temp2=getRoot(y,list1)
if temp1==temp2:
return False
if rank[temp1]>rank[temp2]:
list1[temp2]=temp1
elif rank[temp1]<rank[temp2]:
list1[temp1]=temp2
else:
#利用深度剪枝
list1[temp1]=temp2
rank[temp2]+=1
return True
并查集 python实现
最新推荐文章于 2024-04-06 21:36:03 发布