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

。_饼干妹妹 提交于 2019-11-30 18:13:28

关键位运算
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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!