Eight Queens:求解八皇后问题。
每次深搜尝试新的一行,同时使用Col[row]
记录每一行中皇后的列,对角线判重使用行列距离相等检测更为方便。
class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
Col.resize(n, -1);
res.assign(n, string(n, '.'));
placeQueen(n, 0);
return allRes;
}
private:
vector<vector<string>> allRes;
vector<string> res;
vector<int> Col;
void placeQueen(int n, int row)
{
if(row == n){
allRes.push_back(res);
return;
}
for(int col = 0; col < n; col++)
{
if(placeable(row, col)){
Col[row] = col;
res[row][col] = 'Q';
placeQueen(n, row + 1);
res[row][col] = '.';
Col[row] = -1;
}
}
}
bool placeable(int row, int col)
{
for(int r = 0; r < row; r++)
{
if(Col[r] == col) return false;
if(row - r == abs(col - Col[r])) return false;
}
return true;
}
};