2014-11-23 2 views
0

Я реализую алгоритмы 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: Исправлена ​​проблема, функция находки прав. Проблема была логической ошибкой, которую я имел в функции Крускала.

ответ

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] 
+0

Спасибо, я пытался, но это не работает :( – kdol

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]) 

Ps Я просто студент, только что закончил CERT IV Networking IT

+0

Исправлена ​​проблема, проблема была в функции Крускала не в операции поиска, но снова спасибо за то, что нашли время, чтобы помочь мне :). – kdol

Смежные вопросы