n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4 输出: 2 解释: 4 皇后问题存在如下两个不同的解法。 [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "...Q", ".Q.."] ]
class Solution { public: int totalNQueens(int n) { return queen(0,0,0,0,0,n); } //l,r,d是左右竖线的控制范围 int queen(int answer, int deep, int l, int d,int r,int n) { if (deep == n)//deep当前深度==皇后数,我们按行填皇后,所以deep其实还代表行数0-7.8说明已填满n皇后 return answer + 1; for (int i = 0; i < n; ++i)//再当前deep依次放入皇后 { if (((1 << i) & l) || ((1 << i)&d) || ((1 << i)&r)) continue; answer = queen(answer, deep + 1, (l << 1) | (1 << (i + 1)), d | (1 << i), (r >> 1) | (1 <<( i - 1)),n); } return answer; } };
原文地址:https://www.cnblogs.com/lsaejn/p/9755584.html
时间: 2024-10-20 04:28:59