leetcode#52 N queensⅡ

Posted 老鼠阿尔吉侬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode#52 N queensⅡ相关的知识,希望对你有一定的参考价值。

皇后问题研究的是如何将 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;
    }
};

 



以上是关于leetcode#52 N queensⅡ的主要内容,如果未能解决你的问题,请参考以下文章

一天一道LeetCode#52. N-Queens II

Leetcode 52 N-Queens II 回溯搜索

Leetcode52 N-Queens II

52.N-Queens II

LeetCode 52.N-Queens II

[LeetCode] N皇后问题