# N皇后 II

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

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

 

示例 1:

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

示例 2:

输入:n = 1
输出:1
    

 

提示:

  • 1 <= n <= 9
  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。
以下程序实现了这一功能,请你填补空白处的内容: ```cpp #include using namespace std; class Solution { public: int totalNQueens(int n) { vector stack(n); return dfs(n, 0, stack); } private: int dfs(int n, int row, vector &stack) { int count = 0; if (row == n) { return count + 1; } else { for (int i = 0; i < n; i++) { if (row == 0 || !conflict(stack, row, i)) { stack[row] = i; _______________________ } } return count; } } 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: int totalNQueens(int n) { vector stack(n); return dfs(n, 0, stack); } private: int dfs(int n, int row, vector &stack) { int count = 0; if (row == n) { return count + 1; } else { for (int i = 0; i < n; i++) { if (row == 0 || !conflict(stack, row, i)) { stack[row] = i; count += dfs(n, row + 1, stack); } } return count; } } 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 count += dfs(n, row + 1, stack); ``` ## 选项 ### A ```cpp count += dfs(n, row - 1, stack); ``` ### B ```cpp count += dfs(n, row, stack); ``` ### C ```cpp count += dfs(n + 1, row, stack); ```