题目链接:N-Queens II
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
这道题的要求是返回N皇后问题总共有多少不同情况。
和N-Queens问题一样,同样的思路,至少这个是统计数量而已,代码也大部分都相同。
时间复杂度:O(???)
空间复杂度:O(n)
1 class Solution
2 {
3 public:
4 int totalNQueens(int n)
5 {
6 vector<int> vi(n);
7 int res = 0;
8 solveNQueens(res, vi, n, 0);
9 return res;
10 }
11
12 private:
13 void solveNQueens(int &res, vector<int> &vi, int n, int c)
14 {
15 if(c == n)
16 {
17 ++ res;
18 return;
19 }
20
21 for(vi[c] = 0; vi[c] < n; ++ vi[c])
22 if(safe(vi, n, c))
23 solveNQueens(res, vi, n, c + 1);
24 }
25
26 bool safe(vector<int> &vi, int n, int c)
27 {
28 for(int i = 0; i < c; ++ i)
29 if(vi[i] == vi[c] || abs(vi[c] - vi[i]) == abs(c - i))
30 return false;
31 return true;
32 }
33 };