如何解决我正在尝试使用回溯解决 N 个皇后我的解决方案是计算值,但是返回逻辑有问题
给定 n==4, 返回 [[[".","Q",".","."],[".","Q"],["Q",". ","."]],[[".","."]]]
这是我的代码:
def solveNQueens(self,n: int) -> List[List[str]]:
ans=[]
a=[['.' for j in range(n)] for i in range(n)]
def valid(row,col):
for i in range(n):
if a[i][col]=='Q':
return False
for i in range(n):
if (row+i<n and col+i<n):
if a[row+i][col+i]=='Q':
return False
for i in range(n):
if (row-i>=0 and col-i>=0):
if a[row-i][col-i]=='Q':
return False
for i in range(n):
if (row-i>=0 and col+i<n):
if a[row-i][col+i]=='Q':
return False
for i in range(n):
if (row+i<n and col-i>=0):
if a[row+i][col-i]=='Q':
return False
return True
def solver(rowNo):
if rowNo == n:
ans.append(list(a))
return
for i in range(n):
if valid(rowNo,i):
a[rowNo][i]='Q'
solver(rowNo+1)
a[rowNo][i]='.'
return
solver(0)
return ans
当我在求解器函数中每次遇到基本条件时都检查时,它正确地解决了问题。但是,每次更改 a.ans 变量时, ans 变量中的附加数组都会更改引用。这导致 an 数组包含两个附加在其完全空初始状态的列表。我不明白为什么。请帮我理解。
解决方法
在行ans.append(list(a))
您正在复制一份清单,
但你应该复制其中的 8 个
因为 a
看起来像这样
a = [
['.','.','Q',...],[... ],...
]
你必须复制a
的每个元素
所以
ans.append([inner.copy() for inner in a])
# I also recommend to use `.copy()` instead `list(original)` to copy
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。