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

2024-09-29 23:25:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

提前谢谢, 林


Tags: selftrueforlenreturnifdefcol
1条回答
网友
1楼 · 发布于 2024-09-29 23:25:25

你只是找到了所有的解决方案(你的验证代码有缺陷,所以它们是一大堆!)。 当找到第一个结果时,您可能也想退出搜索。。。你知道吗

            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

相关问题 更多 >

    热门问题