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.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."] ]
class Solution {
public:
vector<vector<string> > ans;
vector<string> v;
int *col;
string s;
vector<vector<string> > solveNQueens(int n) {
for(int i = 0;i < n;i ++)
s.push_back('.');
col = new int[n];
generate(n,0);
return ans;
}
void generate(int n,int dep){
if(dep == n){
ans.push_back(v);
return;
}
for(int i = 0;i < n;i ++){
if(check(dep,i)){
string ss = s;
ss[i] = 'Q';
v.push_back(ss);
generate(n,dep + 1);
v.pop_back();
col[dep] = -1;
}
}
}
bool check(int k,int i){
col[k] = i;
for(int i = 0;i < k;i ++)
if(col[i] == col[k] || abs(col[i] - col[k]) == abs(i - k)) return false;
return true;
}
};