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)
N皇后问题(蓝桥杯-Python-dfs)
最新推荐文章于 2024-10-31 21:00:35 发布