这是我的8皇后问题的代码以及为什么我的输出都是空列表([]
)?
我已检查此声明print "result ok", result
将获得非空结果。
class Solution(object):
def __init__(self, finalResult):
self.finalResult = finalResult
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
self.finalResult.append(result)
else:
self.NQueens(result)
result.pop(-1)
return
if __name__ == "__main__":
finalResult = []
s = Solution(finalResult)
s.NQueens([])
print len(s.finalResult)
for i in s.finalResult:
print i
输出,
92
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
答案 0 :(得分:3)
你应该替换
andBegin
与
self.finalResult.append(result)
这将创建"结果"的副本。您当前的代码正在创建多个对同一结果的引用,这些引用都会被result.pop(-1)
清空答案 1 :(得分:2)
您只有一个操作列表result
。当你追加时,你将一个'引用'附加到该列表,然后你继续修改它。最后它是空的,所以你打印92次空列表。您只需要在添加之前创建当前result
的副本。