在52. N-Queens II的基础上微改代码即可,添加棋盘的输出:
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<int> temp;
vector<vector<string>> res;
vector<string> nullpoint;
init(nullpoint,n);
find(res,temp,0,n,nullpoint);
return res;
}
void init(vector<string>& nullpoint,int total) //初始化一个空的棋盘格,各位置均为字符'.'
{
string s;
for(int i = 0;i<total;i++)
s= s+'.';
for(int i=0;i<total;i++)
nullpoint.push_back(s);
}
bool check(vector<int>& temp, int row, int col)
{
for (int i = 0; i < temp.size(); i++)
{
if (row == i || col == temp[i] || abs((row - i)) == abs((col - temp[i])))
return 0;
}
return 1;
}
void find(vector<vector<string>>& res, vector<int>& temp, int row, int total,vector<string> nullpoint)
{
if (row == total)
{
for(int i=0;i<temp.size();i++)
nullpoint[i][temp[i]]='Q'; //得到一解后,将nullpoint中的(i,temp[i])位置替换为'Q'
res.push_back(nullpoint);
return;
}
int i = row;
for (int j = 0; j < total; j++)
{
if (check(temp,i,j))
{
temp.push_back(j);
find(res, temp, i + 1, total,nullpoint);
temp.pop_back();
}
}
}
};