对于“皇后问题”(在棋盘上放置8个皇后,这样他们之间就不会互相攻击)我编写了一个程序,以列表形式显示所有可能的解决方案。该列表有8个位置,每个位置代表棋盘的x坐标。该代码工作正常,但最后我想制作另一个列表,其中包含所有列表以及可能的问题解决方案。这里出现问题:解决方案列表仅多次显示最终解决方案。我认为这是因为列表采用了变量(在此为b)并将其追加,然后在我打印时,它仅打印了b的最终解决方案,因为它已更改。我该如何解决?
我添加了显示常规设置的部分代码:b是具有8个元素的列表,代表国际象棋棋盘。sol应该是包含所有可能解决方案的列表
for b[0] in r8:
for b[1] in r8:
if check(1) == True and checkdi(1) == True:
for b[2] in r8:
if check(2) == True and checkdi(2) == True:
for b[3] in r8:
if check(3) == True and checkdi(3) == True:
for b[4] in r8:
if check(4) == True and checkdi(4) == True:
for b[5] in r8:
if check(5) == True and checkdi(5) == True:
for b[6] in r8:
if check(6) == True and checkdi(6) == True:
for b[7] in r8:
if check(7) == True and checkdi(7) == True:
sol.append(b)
print(sol)
print(b)
它使用print(b)打印的解决方案都很好,因此代码可以正常工作,我只需要帮助即可创建所有可能解决方案的列表
这是我在这里的第一篇文章,如果有什么我可以做得更好的地方,请也告诉我。
您可以尝试使用
import copy
sol.append(copy.deepcopy(b))
,也许只是在完成循环的地方打印sol。这里我假设您在循环之前将sol初始化为sol = []
。