为什么我的8皇后问题无限循环?

时间:2015-10-19 02:02:20

标签: python algorithm

这是我的代码,并想知道为什么它变成无限循环?感谢。

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([])
提前谢谢, 林

1 个答案:

答案 0 :(得分: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