N皇后问题 --使用位运算解决

Posted yeni

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了N皇后问题 --使用位运算解决相关的知识,希望对你有一定的参考价值。

关键位运算
x & (-x) 取得最低位1
x & (x-1) 去掉最低位1

class Solution(object):
    def totalNQueens(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n < 1 : return []
        self.count = 0
        self.DFS(n,0,0,0,0)
        return self.count
    
    def DFS(self,n, row, cols, pie, na):
        
        if row >=n:
            self.count += 1
            return
        # 得到当前所有的空位
        bits = (~(cols | pie | na)) & ((1<<n)-1)
        
        while bits:
            p = bits & -bits # 取到最低位的1
            self.DFS(n, row + 1, cols|p, (pie|p) <<1, (na|p)>>1)
            bits = bits & (bits - 1) # 去掉最低位的1

以上是关于N皇后问题 --使用位运算解决的主要内容,如果未能解决你的问题,请参考以下文章

验证 N 皇后问题的解决方案

求解八皇后问题的退火算法

解决 N 个皇后时的数组索引超出范围异常

N皇后问题

算法设计与分析实验五-旅行商问题|实验六-n皇后问题

算法设计与分析实验五-旅行商问题|实验六-n皇后问题