n皇后问题
终于到了n皇后问题,久仰大名,终于第一次解决了,其实也没有那么难
vector<vector<string>> result;
bool isvalid(vector<string> &path, int row, int col){
for(int i = row; i >= 0; i--){
if(path[i][col] == 'Q'){
return false;
}
}
for(int i = row , j = col; i >= 0 && j < path.size(); i--, j++){
if(path[i][j] == 'Q')
return false;
}
for(int i = row, j = col; i >= 0 && j >= 0; i--, j-- ){
if(path[i][j] == 'Q')
return false;
}
return true;
}
void backing(int n, int row, vector<string> &path){
if(row == n){
result.push_back(path);
return;
}
for(int i = 0; i < n; i++){
if(isvalid(path, row, i)){
path[row][i] = 'Q';
backing(n, row + 1, path);
path[row][i] = '.';
}
}
}
vector<vector<string>> solveNQueens(int n) {
vector<string> path(n, string(n, '.'));
backing(n, 0, path);
return result;
}