class Solution {
char g[10][10];
bool col[20],dg[20],udg[20];
vector<vector<string>> res;//保存答案
vector<string> str;//用于保存答案的每一行
public:
void dfs(int u,int n){
if(u==n){
for(int i=0;i<n;i++){
str.push_back(g[i]);
}
res.push_back(str);
str.clear();//清空,防止污染
return ;
}
for(int i=0;i<n;i++){
//每列、对角线和反对角线只能选择一个
if(!col[i]&&!dg[u+i]&&!udg[i-u+n]){
g[u][i]='Q';
col[i]=dg[u+i]=udg[i-u+n]=true;
dfs(u+1,n);
g[u][i]='.';
col[i]=dg[u+i]=udg[i-u+n]=false;
}
}
}
vector<vector<string>> solveNQueens(int n) {
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
g[i][j]='.';
dfs(0,n);
return res;
}
};