n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
注:皇后的攻击模式是同行或同列,以及两条斜线。
52 N-Queens N皇后
示例
1 | 输入: 4 |
思路
N皇后问题一直是一个很经典的问题。目前常见的算法多是递归加回溯,我先介绍一下这种递归加回溯的算法。
这种回溯加裁剪的思路,很像穷举,把所有路子走一遍,途中若走不通,就换一条路。
首先通过三个数组来判断当前位置是否能放皇后,一个是col,因为我们是按行遍历的,所以只需要考虑列是否被占用,isDiagonal[]
是正对角线,obliqueDiagonal[]
是斜对角线,然后根据条件遍历裁剪即可。
1 | public class NQueens { |