# N 皇后

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q''.' 分别代表了皇后和空位。

 

示例 1:

输入:n = 4
输出:
[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:
如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:
[["Q"]]

 

提示:

以下程序实现了这一功能,请你填补空白处的内容: ```cpp #include using namespace std; class Solution { public: vector> solveNQueens(int n) { vector> res; vector stack(n); vector solution(n, string(n, '.')); dfs(n, 0, stack, solution, res); return res; } private: void dfs(int n, int row, vector &stack, vector &solution, vector> &res) { if (row == n) { res.push_back(solution); } else { for (int i = 0; i < n; i++) { if (row == 0 || !conflict(stack, row, i)) { __________________; } } } } bool conflict(vector &stack, int row, int col) { for (int i = 0; i < row; i++) { if (col == stack[i] || abs(row - i) == abs(col - stack[i])) { return true; } } return false; } } ``` ## template ```cpp #include using namespace std; class Solution { public: vector> solveNQueens(int n) { vector> res; vector stack(n); vector solution(n, string(n, '.')); dfs(n, 0, stack, solution, res); return res; } private: void dfs(int n, int row, vector &stack, vector &solution, vector> &res) { if (row == n) { res.push_back(solution); } else { for (int i = 0; i < n; i++) { if (row == 0 || !conflict(stack, row, i)) { solution[row][i] = 'Q'; stack[row] = i; dfs(n, row + 1, stack, solution, res); solution[row][i] = '.'; } } } } bool conflict(vector &stack, int row, int col) { for (int i = 0; i < row; i++) { if (col == stack[i] || abs(row - i) == abs(col - stack[i])) { return true; } } return false; } } ``` ## 答案 ```cpp solution[row][i] = 'Q'; stack[row] = i; dfs(n, row + 1, stack, solution, res); solution[row][i] = '.'; ``` ## 选项 ### A ```cpp solution[row][i] = 'Q'; stack[row] = i; dfs(n, row, stack, solution, res); solution[row][i] = '.'; ``` ### B ```cpp solution[row][i] = '.'; stack[row] = i; dfs(n, row + 1, stack, solution, res); solution[row][i] = 'Q'; ``` ### C ```cpp solution[row][i] = '.'; stack[row] = i; dfs(n, row, stack, solution, res); solution[row][i] = 'Q'; ```