n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
代码语言:javascript复制输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
还是和上一题N皇后1解法一样,只是不用存储皇后的位置,代码简化了
代码语言:javascript复制import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
class Solution {
// output
List<List<String>> res = new ArrayList();
Set<Integer> col = new HashSet<>();
Set<Integer> na = new HashSet<>();
Set<Integer> pie = new HashSet<>();
private int n;
private int total;
public int totalNQueens(int n) {
this.n = n;
backtrack(0);
return total;
}
public void backtrack(int row){
if(n==row){
total ;
return;
}
// 针对每一列,尝试是否可以放置
for (int colunm = 0; colunm < n; colunm ) {
if (!col.contains(colunm) && !pie.contains(row colunm) && !na.contains(row - colunm)) {
col.add(colunm);
pie.add(row colunm);
na.add(row - colunm);
backtrack(row 1);
na.remove(row - colunm);
pie.remove(row colunm);
col.remove(colunm);
}
}
}
}