题目描述:
有一个 n×n 的国际象棋棋盘(n 行 n 列的方格图),请在棋盘中摆放 n 个受伤的国际象棋皇后,要求:
- 任何两个皇后不在同一行。
- 任何两个皇后不在同一列。
- 如果两个皇后在同一条 45 度角的斜线上,这两个皇后之间行号的差值至少为 3 。
请问一共有多少种摆放方案。
输入描述
输入的第一行包含一个整数 n。
其中,1≤n≤10。
输出描述
输出一个整数,表示答案。
输入输出样例
示例 1
输入
4
输出
2
代码:
def pd(t):
for i in range(1,t):#判断第t个皇后是否与前t个皇后冲突
if a[i]==a[t]:return False#两个皇后在同一列
elif abs(t-i)==abs(a[t]-a[i])<3:return False#两皇后在同一条对角线上,且行数不超过3
return True
def check(t):
global ans
if t>n:ans+=1;return True
else:return False
def dfs(t):#t表示皇后个数及行数
if check(t):return
else:
for i in range(1,n+1):#存放第t个皇后的列数
a[t]=i
if pd(t):dfs(t+1)#查看皇后存放的位置是否合适,合适则存放下一个皇后
else:continue
n=int(input())
ans=0 #记录方案数目
a=[0]*15 #用于存储列数
dfs(1)#从1开始
print(ans)