https://leetcode-cn.com/problems/n-queens/comments/
参考:
https://www.cnblogs.com/grandyang/p/4377782.html
可以定义一个数组,存储当前行放置皇后的列数。
递归,所有行,在每一行判断当前列是否发生重复,如果没有重复,尝试放入,继续递归。
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
vector<vector<string> >ans;
vector<int>Que_col(n,-1); // 代表第i行的列坐标;
solve(ans,Que_col,0,n);
return ans;
}
void solve (vector<vector<string> >&ans,vector<int>&Que_col,int cur_row,int n){
if (cur_row==n)
{
vector<string>v(n,string(n,'.'));
for (int i=0;i<n;i++)
{
v[i][Que_col[i]] = 'Q';
}
ans.push_back(v);
return ;
}
for (int cur_col=0;cur_col<n;cur_col++)
{
if (is_valid(cur_row,cur_col,Que_col))
{
Que_col[cur_row] = cur_col;
solve(ans,Que_col,cur_row+1,n);
Que_col[cur_row] = -1;
}
}
}
bool is_valid(int cur_row,int cur_col,vector<int>Que_col)
{
for (int i=0;i<cur_row;i++)
{
if (cur_col==Que_col[i] || abs(cur_col-Que_col[i])==abs(cur_row-i))
{
return false;
}
}
return true;
}
};