解析: 思路同上一篇内容
这里 Nqueen函数的要多几个入参,一个是用来记录棋盘格内容的 v 定义成vector<vector<string>> v
class Solution {
void Nqueen(int k , int n, int* queenPos, vector<vector<string>> &v)
{
if(k==n)
{
vector<string> s;//记录每种摆法的所有棋盘格内容
string s1; //表示.Q.. 记录每行的 棋盘的内容
for(int x = 0; x < n; x++) //按行遍历棋盘格 并根据是否有皇后进行填充
{
for(int y = 0; y < n;y++)
{
if(queenPos[x]==y) s1+='Q';
else s1+='.';
}
s.push_back(s1);
s1="";// 每行用完记得清空s1
}
v.push_back(s);
}
int i;
for(i = 0; i < n; i++)
{
int j;
for(j = 0; j < k; j++)
{
if(queenPos[j]==i||abs(queenPos[j]-i)==abs(j-k)) break;
}
if(j==k)
{
queenPos[k]=i;
Nqueen(k+1,n,queenPos,v);
}
}
}
public:
vector<vector<string>> solveNQueens(int n) {
int queenPos[100];
vector<vector<string>> v;//作为最后的输出
Nqueen(0,n,queenPos,v);//n作为棋盘格的行/列数
return v;
}
};