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.."] ]
解题思路:回溯法,以行号作为索引进行遍历,visit记载的哪些列号已经使用,visit2记载的是哪些主对角线已经使用,visit3记载的是哪些副对角线已经使用。
class Solution {
public:
int target,result=0;
vector<int>visit,visit1,visit2;
int totalNQueens(int n) {
target=n;
visit1.resize(2*n,0);visit.resize(n,0);
visit2.resize(2*n,0);
search(0);
return result;
}
void search(int cur){
if(cur==target){
result++;
return;
}
for(int i=0;i<target;i++){
if(visit[i]==0&&visit1[target+cur-i]==0&&visit2[cur+i]==0){
visit[i]=1;visit1[target+cur-i]=1;visit2[cur+i]=1;
search(cur+1);
visit[i]=0;visit1[target+cur-i]=0;visit2[cur+i]=0;
}
}
}
};