我在Python中实现Dijkstra和Kruskal算法,以便在随机图(常规图和密集图)中找到最大带宽路径。但是,当我运行Kruskal算法生成最大生成树并且调用操作find时,它会在查找操作的循环内部引起无限循环(这发生在常规图形或密集图形中)。这个错误很奇怪,因为之前一切正常,有时查找操作对两个图都有效。我通过遵循类中给出的伪代码实现了find操作。我的部分代码是:
class Disjoint:
def __init__(self,size):
"""
Equivalent to MakeSet
Vertices are numbered from 1 to size
"""
self.parent = [0]*(size+1)
self.rank = [0]*(size+1)
def find(self,v):
R = [] #stack
r = v
while self.parent[r] != 0:
#sometimes this loop never stops (infinite loop)
R.append(r)
r = self.parent[r]
while len(R) != 0:
w = R.pop()
self.parent[w] = r
del w
del R
#del w
return r
def __del__(self):
del self.parent
del self.rank
更新: 问题解决了,查找功能是对的。问题是我在Kruskal函数中遇到的逻辑错误。
答案 0 :(得分:0)
while self.parent[r] != 0:
#sometimes this loop never stops (infinite loop)
R.append(r)
r = self.parent[r]
while self.parent[r] == 0:
break
else:
R.append(r)
r = self.parent[r]
答案 1 :(得分:0)
if self.parent[r] == 0:
pass
#print("error", self.parent[r])
else:
while self.parent[r] (equal to or greater) 1:
R.append(r)
r = self.parent[r]
else:
#print("error", self.parent[r])
P.s我只是一名学生,刚毕业的Cert IV Networking IT