n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4 输出: 2 解释: 4 皇后问题存在如下两个不同的解法。 [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "...Q", ".Q.."] ]
1 class Solution { 2 public: 3 4 int res = 0; 5 int size; 6 vector<int> path; 7 int totalNQueens(int n) { 8 size = n; 9 for(int i = 0;i < n;++i) 10 { 11 path.push_back(-1); 12 } 13 dfs(0); 14 return res; 15 } 16 void dfs(int x) 17 { 18 if(x == size) 19 { 20 res++; 21 } 22 for(int i = 0;i < size; ++i) 23 { 24 if(check(x,i)) 25 { 26 path[x] = i; 27 dfs(x+1); 28 path[x] = -1; 29 } 30 } 31 } 32 bool check(int x,int k) 33 { 34 if(x == 0) 35 return true; 36 for(int i = 0;i < x;i++) 37 { 38 if(path[i] == k || abs(i - x) == abs(k - path[i])) 39 { 40 return false; 41 } 42 } 43 return true; 44 } 45 46 47 };