经典的N皇后问题, 深度遍历
class Solution {
public:
vector<vector<string> > solveNQueens(int n) {
vector<vector<char> >Q(n, vector<char>(n, '.'));
vector<vector<string> > result;
solveNQueensAssist(Q, 0, result);
return result;
}
private:
void solveNQueensAssist(vector<vector<char> > &Q, int row, vector<vector<string> > &result) {
if(row >= Q.size()) {
saveResult(Q, result);
return;
}
for(int i = 0; i < Q[row].size(); i++) {
if(Q[row][i] == '.') {
Q[row][i] = 'Q';
if(isValid(Q, row, i)) {
solveNQueensAssist(Q, row + 1, result);
}
Q[row][i] = '.';
}
}
}
bool isValid(vector<vector<char> > &Q, int row, int col) {
for(int i = row - 1; i >= 0; i--) {
if(Q[i][col] == 'Q')
return false;
}
for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if(Q[i][j] == 'Q')
return false;
}
for(int i = row - 1, j = col + 1; i >= 0 && j < Q[i].size(); i--, j++) {
if(Q[i][j] == 'Q')
return false;
}
return true;
}
void saveResult(vector<vector<char> > &Q, vector<vector<string> > &result) {
vector<string> temp;
for(int i = 0; i < Q.size(); i++) {
string str(Q[i].begin(), Q[i].end());
temp.push_back(str);
}
result.push_back(temp);
}
};