问题描述
解题报告
深度优先遍历
- 当前在哪一步
- 在当前步尝试各种数字
- 将选中的数字进行标记
- 检验是否和已经选中的数字冲突
- 不冲突,继续下一步
- 冲突,终止当前
实现代码
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<int>>ans;
vector<int>C(n,-1);
dfs(0,n,ans,C);
vector<vector<string>>str;
str.resize(ans.size());
for(int i=0;i<ans.size();i++){
for(int j=0;j<ans[i].size();j++){
string temp(n,'.');
temp[ans[i][j]]='Q';
str[i].push_back(temp);
}
}
return str;
// return ans;
}
void dfs(int cur,int &n,vector<vector<int>>&ans,vector<int>C){
// vector<int>C(n,-1);
if(cur==n){
ans.push_back(C);
}
else{
for(int i=0;i<n;i++){
int flag=1;
C[cur]=i;
for(int j=0;j<cur;j++){
if(C[cur]==C[j]||cur-C[cur]==j-C[j]||cur+C[cur]==j+C[j]){
flag=0;
break;
}
}
if(flag)
dfs(cur+1,n,ans,C);
}
}
}
};