Bit arithmetic solves the eight queen

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)

Guess you like

Origin blog.csdn.net/qq_43657442/article/details/109047183