原题链接:Leecode 51. N 皇后
同样的问题(有注释版):Acwing 3472. 八皇后 递归回溯优化
class Solution {
public:
vector<vector<string>> res;
bool f[10];
int p[10];
void dfs(int n,int now)
{
if(now==n+1)
{
vector<string> t;
for(int i=1;i<=n;i++)
{
string s;
for(int j=1;j<=n;j++)
{
if(j!=p[i])
s+=".";
else
s+="Q";
}
t.push_back(s);
}
res.push_back(t);
return ;
}
for(int x=1;x<=n;x++)
{
if(!f[x])
{
bool flag=true;
for(int pre=1;pre<now;pre++)
{
if(abs(now-pre)==abs(x-p[pre]))
{
flag=false;
break;
}
}
if(flag)
{
f[x]=true;
p[now]=x;
dfs(n,now+1);
f[x]=false;
}
}
}
}
vector<vector<string>> solveNQueens(int n) {
dfs(n,1);
return res;
}
};