2015-10-19 50 views
-3

這是我的代碼,並想知道爲什麼它變成無限循環?謝謝。爲什麼我的8皇后問題無限循環?

class Solution(object): 
    def Valid(self,result): 
     currentX = len(result) - 1 
     currentY = result[-1] 
     if currentX == 0: 
      return True 
     for i in range(0, len(result) - 1): 
      if result[i] == currentY: 
       return False 
      elif abs(i - currentX) == abs(result[i] - currentY): 
       return False 
     return True 

    def NQueens(self, result): 
     if result == []: 
      row = 0 
     else: 
      row = len(result) 
     for col in range(0, 8): 
      result.append(col) 
      if self.Valid(result) == True: 
       print "check valid ok", row, col, result 
       if row == 7: 
        print "result ok", result 
       else: 
        self.NQueens(result) 
      result.pop(-1) 

     return 
if __name__ == "__main__": 
    s = Solution() 
    s.NQueens([]) 

在此先感謝, 林

+2

使用任何IDE,比如pycharm調試代碼 –

+0

@Jack ,我做了調試,但沒有想法爲什麼它成爲無限循環。如果你有任何見解,它將會很棒。 :( –

回答

1

你只是找到所有的解決方案(您的驗證碼被竊聽,所以他們是一個巨大的很多!)。 你可能也想只要第一個結果被發現離開你的搜索...

  if row == 7: 
       print "result ok", result 
       exit(); 

要解決您的有效功能:

for i in range(0, len(result)-1): 
    if result[i] == Y or abs(i - X) == abs(result[i] - Y): 
     return False 
return True 
+0

感謝您的建議。是的,你是正確的,我想找到所有的解決方案,但我使用if/else,並且當row是7時,我從不執行「self.NQueens(result)」(意味着滿意的解決方案是發現),不知道爲什麼無限循環?你的見解是讚賞。謝謝。:) –

+1

你沒有任何無限循環!正如我所說,你的程序在一段時間後結束,它只是打印了大量的垃圾(錯誤的'解決方案'),因爲你的有效函數是錯誤的。從確保您的有效性檢查開始... – Julien

+0

有效功能有什麼問題? –