https://leetcode.com/problems/n-queens-ii/
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return the number of distinct solutions to the n-queens puzzle.
Example:
Input: 4 Output: 2 Explanation: There are two distinct solutions to the 4-queens puzzle as shown below. [ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ]
题解:还是深搜 如果和之前的皇后不在同行列和对角线的时候可以放置
$n = 8$ 的时候有 $92$ 种放置方法
代码:
class Solution {
public:
int totalNQueens(int n) {
int ans = 0;
vector<int> pos(n, -1);
dfs(pos, 0, ans);
return ans;
}
void dfs(vector<int>& pos, int step, int &ans) {
int n = pos.size();
if(step == n) ans ++;
else {
for(int i = 0; i < n; i ++) {
if(ishere(pos, step, i)) {
pos[step] = i;
dfs(pos, step + 1, ans);
pos[step] = -1;
}
}
}
}
bool ishere(vector<int>& pos, int line, int row) {
for(int i = 0; i < line; i ++) {
if(row == pos[i] || abs(line - i) == abs(row - pos[i]))
return false;
}
return true;
}
};