在n皇后问题中检查对角线/列冲突

时间:2019-02-11 00:07:18

标签: python recursion backtracking n-queens

因此,我试图理解这种解决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]))

有人可以澄清一下吗?

0 个答案:

没有答案