2015-10-19 71 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

有效功能有什么问题? –