又是简单深度优先问题
class Solution {
public:
vector<bool> useCol;
vector<int> rowNum;
vector<vector<string>> result;
void dfs(vector<string> &board,int n)
{
if(board.size()==n)
{
result.push_back(board);
return;
}
int cur_row=board.size();
for(int i=0;i<n;i++)
{
if(useCol[i]==false)
{
bool notConflict=true;
for(int r=0;r<board.size();r++)
{
if(cur_row-r-i+rowNum[r]==0)
{
notConflict=false;
break;
}
else if(cur_row-r==rowNum[r]-i)
{
notConflict=false;
break;
}
}
if(notConflict)
{
rowNum[cur_row]=i;
board.push_back(dict[i]);
useCol[i]=true;
dfs(board,n);
useCol[i]=false;
board.pop_back();
}
}
}
}
vector<string> dict;
vector<vector<string> > solveNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
useCol.clear();
useCol.assign(n,false);
rowNum.resize(n);
result.clear();
dict.clear();
vector<string> board;
string head="";
for(int i=0;i<n;i++)
{
string tmp(n-1-i,'.');
dict.push_back(head+'Q'+tmp);
head+='.';
}
dfs(board,n);
return result;
}
};