Python 当使用递归时,如何将所有输出放在一个列表中?
我正在用python做八个皇后。我想使用append方法将所有输出放在一个列表中。 然而,很奇怪的是,所有的输出都是一样的。 有人能帮我吗 我正在使用四个皇后测试我的程序:Python 当使用递归时,如何将所有输出放在一个列表中?,python,recursion,Python,Recursion,我正在用python做八个皇后。我想使用append方法将所有输出放在一个列表中。 然而,很奇怪的是,所有的输出都是一样的。 有人能帮我吗 我正在使用四个皇后测试我的程序: board = [] solution=[] def isConflict(x, y): for (i, j) in board: if x == i: return True if y == j: return True
board = []
solution=[]
def isConflict(x, y):
for (i, j) in board:
if x == i:
return True
if y == j:
return True
if abs(x - i) == abs(y - j):
return True
else:
return False
def solve(x,y):
for y in range(1, 5):
if isConflict(x, y)==False:
board.append((x, y))
solve(x + 1,y)
board.remove((x,y))
if x > 4:
solution.append(board)
print(solution)
solve(1,1)
输出如下所示:
[[(1, 2), (2, 4), (3, 1), (4, 3)]]
[[(1, 3), (2, 1), (3, 4), (4, 2)], [(1, 3), (2, 1), (3, 4), (4, 2)]]
然而,我想要的是:
[[(1, 2), (2, 4), (3, 1), (4, 3)]]
[[(1, 2), (2, 4), (3, 1), (4, 3)], [(1, 3), (2, 1), (3, 4), (4, 2)]]
我该怎么办?我不明白你的
solve(x,y)
函数如何使用它的y
参数。它似乎在第一行覆盖了它。您多次将相同的板添加到解决方案中。添加板时复制板,或者在将板添加到解决方案后,启动一个新的板
,这样您就不会修改已添加的板。这一点也不奇怪:您不复制列表。这意味着每个解决方案都引用相同的列表。如果你append(board)
,你应该append(list(board))
。我不知道8皇后的问题是什么,但是有人已经在python中做了这件事,尝试这个链接运行你的代码,看看它对board
和解决方案中的两个条目使用相同的列表,然后使用@WillemVanOnsem的建议,并将其作为答案发布。