class Solution {
public:
void dfs(int index, vector<string> &cur_board){
if (index == nn){
result.push_back(cur_board);
}
else{
int x, y = index;
for(int i=0;i<nn;++i){
x = i;
if(!row_num[y] && !col_num[x] && !left_top[x - y + nn - 1] && !right_top[x + y]){
cur_board[x][y] = 'Q';
row_num[y] = 1;
col_num[x] = 1;
left_top[x - y + nn - 1] = 1;
right_top[x + y] = 1;
dfs(index + 1, cur_board);
row_num[y] = 0;
col_num[x] = 0;
left_top[x - y + nn - 1] = 0;
right_top[x + y] = 0;
cur_board[x][y] = '.';
}
}
}
}
vector<vector<string>> solveNQueens(int n) {
nn = n;
row_num = vector<int>(n, 0);
col_num = vector<int>(n, 0);
left_top = vector<int>(2*n - 1, 0);
right_top = vector<int>(2*n - 1, 0);
vector<string> cur_board(n , string(n, '.'));
dfs(0, cur_board);
return result;
}
private:
int nn;
vector<int> row_num;
vector<int> col_num;
vector<int> left_top;
vector<int> right_top;
vector<vector<string>> result;
};