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 all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'
and '.'
both indicate a queen and an empty space respectively.
Example:
Input: 4 Output: [ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ] Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
解题思路:建议先看52题,visit ,visit1,visit2 的作用与52题的一致,row记载的是每一行的queen所在列号
class Solution {
public:
vector<vector<string>>result;
string temp;
int target;
vector<int>visit,visit1,visit2,row;
vector<vector<string>> solveNQueens(int n) {
target=n;
visit1.resize(2*n,0);visit.resize(n,0);
visit2.resize(2*n,0);
row.resize(n);
for(int i=0;i<n;i++)
temp+='.';
search(0);
return result;
}
void search(int cur){
if(cur==target){
vector<string>tempresult(target);
for(int i=0;i<target;i++){
tempresult[i]=temp;
tempresult[i][row[i]]='Q';
}
result.push_back(tempresult);
return;
}
for(int i=0;i<target;i++){
if(visit[i]==0&&visit1[target+cur-i]==0&&visit2[cur+i]==0){
row[cur]=i;
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;
}
}
}
};