The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens’ placement, where’Q’and’.’both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[
[“.Q..”, // Solution 1
“…Q”,
“Q…”,
“..Q.”],
[“..Q.”, // Solution 2
“Q…”,
“…Q”,
“.Q..”]
]
class Solution {
public:
bool judge_quee(string &vec) //判断n个皇后是否在对角线上
{
int len=vec.size();
if(len<=1)
return true;
for(int i=0;i<len;++i)
for(int j=i+1;j<len;++j)
{
if(i-j==vec[i]-vec[j]||j-i==vec[i]-vec[j])
return false;
}
return true;
}
vector<vector<string> > solveNQueens(int n) {
string vec;
for(int i=0;i<n;++i)
vec+=(i+'0');
vector<vector<string> > res;
recur_pai(res,vec,0);
return res;
}
void recur_pai(vector<vector<string>> &res,string &vec,int begin)//求全排列
{
if(begin==vec.size()&&judge_quee(vec)){
vector<string> temp(vec.size(),string(vec.size(),'.'));
for(int i=0;i<vec.size();++i)
{
temp[i][vec[i]-'0']='Q';
}
res.push_back(temp);
}
for(int i=begin;i<vec.size();++i){
swap(vec[begin],vec[i]);
recur_pai(res,vec,begin+1);
swap(vec[begin],vec[i]);
}
}
};