今天我们将来求解N皇后问题。
1.N皇后问题
N 皇后问题是一个经典的问题,在一个 N×N 的棋盘上放置 N 个皇后,每行刚好放置一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。
上图就是一个合法的 8 皇后的解。
N 皇后问题是指:计算一共有多少种合法的方法放置 N 个皇后。
很显然,我们依然会用 dfs 来求解
N 皇后问题,我们的搜索策略如下。
从第 0 列开始,我们依次给每一列放置一个皇后,对于一个确定的列,我们只需要去枚举放置的行即可,在保证放置合法的情况下,一直搜索下去。
下图是 N=4 时搜索树的局部形态:
上图中每个状态下的
−2,−1,0 表示的是该状态的冲突次数(在多少列或斜线发生冲突),只有当冲突次数为
0 时才是合法状态。
确定了搜索策略,现在我们还有一个问题没有解决,那么就是如何判