位运算解决八皇后

def queenSettle(row,colomn,pie,na):
    global count
    if row == N:
        count += 1
        return
    bits = (~(colomn | pie | na)) & ((1 << N)-1)
    while bits > 0:
        p = bits & -bits
        queenSettle(row+1,colomn | p,(pie | p) >> 1,(na | p) << 1)
        bits = bits & (bits-1)

count = 0
N = 13
queenSettle(0,0,0,0)
print(count)
def DFS(row, shu, pie, na):
    global count
    bits = ((1 << n) - 1) & ~(shu | pie | na)  # 当前行还能放置皇后的列
    while bits:                                # 枚举可用的列
        p = bits & -bits
        bits ^= p
        if row == n - 1:
            count += 1
        else:
            DFS(row + 1, shu | p, (pie | p) >> 1, (na | p) << 1) # 设置标记并移位

n = 8
count = 0
DFS(0, 0, 0, 0)
print(count)
posted on 2021-06-11 10:19  雾恋过往  阅读(48)  评论(0编辑  收藏  举报

Live2D