题目
n n n 皇后问题研究的是如何将 n n n 个皇后放置在 n × n n\times n n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n n n,返回所有不同的 n n n 皇后问题的解决方案。
每一种解法包含一个明确的 n n n 皇后问题的棋子放置方案,该方案中 'Q'
和 '.'
分别代表了皇后和空位。
示例:
输入:4
输出:[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
提示:
- 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。
思路
适合采用dfs思路,对矩阵从上到下一层一层遍历,如果当前层找到符合条件的位置,则放入皇后并且到下一层继续查找,对于三种判断规则:
- 对于横行,由于采用dfs,所以同一行不可能放两个皇后;
- 对于纵行,定义一个
v[n]
数组,表示每一列皇后的数量ÿ