首页 > 其他 > 详细

N-Queen

时间:2020-05-23 00:15:04      阅读:56      评论:0      收藏:0      [点我收藏+]
51. N-Queens
Input: 4
Output: [
 [".Q..",  // Solution 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // Solution 2
  "Q...",
  "...Q",
  ".Q.."]
]
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.


52. N-Queens II
Input: 4
Output: 2
Explanation: There are two distinct solutions to the 4-queens puzzle as shown below.
[
 [".Q..",  // Solution 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // Solution 2
  "Q...",
  "...Q",
  ".Q.."]
]
技术分享图片
class Solution:
    def totalNQueens(self, n: int) -> int:
        self.result=[]
        self.pie=set();self.na=set();self.cols=set()
        self._dfs(n,0,[])
        return len(self.result)
    
    def _dfs(self,n,row,c):
        if n<1:return []
        if row>=n:
            self.result.append(c)
            return
        for col in range(n):
            if col in self.cols or col-row in self.pie or col+row in self.na:
                continue
            self.cols.add(col)
            self.pie.add(col-row)
            self.na.add(col+row)
            
            self._dfs(n,row+1,c)
            
            self.cols.remove(col)
            self.pie.remove(col-row)
            self.na.remove(col+row)
        
DFS

 

技术分享图片
class Solution:
    def totalNQueens(self, n: int) -> int:
        if n < 1:return []
        self.count = 0
        self._dfs(n,0,0,0,0)
        return self.count
    
    def _dfs(self,n,row,col,pie,na):
        if row>=n:
            self.count +=1
            return
        bits = (~(pie|col|na)&(1<<n)-1)
        while bits:
            p = bits & (-bits)
            self._dfs(n,row+1,col|p,(pie|p)<<1,(na|p)>>1)
            bits = bits & (bits-1)


row=0,col=0,pie=0,na=0
bits= 15
p= 1
row=1,col=1,pie=2,na=0
bits= 12
p= 4
row=2,col=5,pie=12,na=2
bits= 0
p= 8
row=2,col=9,pie=20,na=4
bits= 2
p= 2
row=3,col=11,pie=44,na=3
bits= 0
p= 2
row=1,col=2,pie=4,na=1
bits= 8
p= 8
row=2,col=10,pie=24,na=4
bits= 1
p= 1
row=3,col=11,pie=50,na=2
bits= 4
p= 4
p= 4
row=1,col=4,pie=8,na=2
bits= 1
p= 1
row=2,col=5,pie=18,na=1
bits= 8
p= 8
row=3,col=13,pie=52,na=4
bits= 2
p= 2
p= 8
row=1,col=8,pie=16,na=4
bits= 3
p= 1
row=2,col=9,pie=34,na=2
bits= 4
p= 4
row=3,col=13,pie=76,na=3
bits= 0
p= 2
row=2,col=10,pie=36,na=3
bits= 0
二进制法

 

 



N-Queen

原文:https://www.cnblogs.com/ybxw/p/12940135.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!