n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q'
和 '.'
分别代表了皇后和空位。
class Solution {
public:
void fun(vector<vector<string>> &res,vector<string> &re, vector<bool> &tmp,vector<bool> tmp1,vector<bool> &tmp2,int p,int &n)
{
if(p>=n)
{
res.push_back(re);
return ;
}
else
{
for(int j=0;j<n;j++)
{
int m=p;
int r;
r=p+j;
int k=n-1+j-p;
if(tmp[j]==false&&tmp1[r]==false&&tmp2[k]==false)
{
re[m][j]='Q';
tmp[j]=true;
tmp1[r]=true;
tmp2[k]=true;
fun(res,re,tmp,tmp1,tmp2,p+1,n);
re[m][j]='.';
tmp[j]=false;
tmp1[r]=false;
tmp2[k]=false;
}
}
}
}
vector<vector<string>> solveNQueens(int n)
{
string a(n,'.');
vector<string> re(n,a);
vector<vector<string> > res;
vector<bool> tmp(n,false);//说明某一列是否被占据
vector<bool> tmp1(2*n-1,false);
vector<bool> tmp2(2*n-1,false);
fun(res,re,tmp,tmp1,tmp2,0,n);
return res;
}
};