因此,我试图理解这种解决N皇后问题的方法,即将n个皇后放置在n×n棋盘上的问题,这样就不会有两个皇后互相攻击。目标是在董事会人数为n的情况下返回所有不同解决方案的递归方法。
def n_queens(n):
def solve_n_queens(row):
if row == n:
result.append(list(col_placement))
return
for col in range(n):
if all(
abs(c - col) not in (0, row - i)
for i, c in enumerate(col_placement[:row])):
col_placement[row] = col
solve_n_queens(row+1)
result, col_placement = [], [0] * n
solve_n_queens(0)
return result
因此,该解决方案的工作方式是典型的递归方法,即通过排列列位置并遍历每一行。
但是我对检查对角线和列冲突感到困惑。具体来说,我不明白这里的逻辑。或者它如何检查冲突之间的逻辑。
if all(abs(c - col) not in (0, row - i) for i, c in enumerate(col_placement[:row]))
有人可以澄清一下吗?