Я реализую алгоритмы Dijkstra и Kruskal в Python, чтобы найти максимальный путь прохождения полосы в случайных графах (регулярные графики и плотные графы). Однако, когда я запускаю алгоритм Крускала для создания максимального связующего дерева и вызывается операция find, он вызывает бесконечный цикл внутри цикла операции поиска (это происходит с регулярным графиком или плотным графом). Эта ошибка странная, потому что все работает до и иногда операция поиска работает правильно для обоих графиков. Я реализовал операцию поиска, выполнив псевдокод, указанный в классе. Часть моего кода:Бесконечный цикл в поиске с сжатием пути, реализованный в python
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
UPDATE: Исправлена проблема, функция находки прав. Проблема была логической ошибкой, которую я имел в функции Крускала.
Спасибо, я пытался, но это не работает :( – kdol