N皇后问题(蓝桥杯-Python-dfs)

import os
import sys

# 请在此输入您的代码
# N皇后
def dfs(x):
    # 层数代表皇后的个数,也代表棋盘的行数
    if x == n+1:
        global ans
        ans += 1
        return
    # 枚举棋盘的列
    for y in range(1, n+1):
        # 此时该点为(x,y)
        # 判断y列,该点主对角线,该点副对对角线是否合法
        # 只要有一个被标记
        # 则表明该点已经被标记
        # 该点不可用,跳过
        if visy[y] or visz[x+y] or visf[x-y+n]:
            continue
        # 该点可用,标记
        visy[y] = visz[x+y] = visf[x-y+n] = True
        # 进入下一行
        dfs(x+1)
        # 取消标记
        visy[y] = visz[x+y] = visf[x-y+n] = False


# n*n的棋盘,n个皇后
n = int(input())
# 标记数组
# 标记列
visy = [False]*(n+1)
# 主副对角线如何唯一表现
# 标记主对角线
visz = [False]*(2*n+1)
# 标记副对角线
visf = [False]*(2*(n+1))
# 放置的方法数
ans = 0
dfs(1)
print(ans)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值