n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],
["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
第一次的代码,和上一题N皇后问题代码几乎一模一样,这题甚至更简单,不需要整理输出的棋盘,直接输出列表的长度,即可行棋盘个数就行
def buchongtu(xu,nextx): #定义一个不冲突函数
nexty=len(xu) #y坐标就是列表xu的长度,即要放皇后的新的那一行
#因为第一个皇后的行的第0行
k=0 #判断与第k行皇后是否冲突
for i in xu:
if i+k==nextx+nexty: #第一种情况,这里的k表示以存在的皇后
#的行坐标y
return False
elif i-k==nextx-nexty: #第二种情况
return False
elif i==nextx: #第三种情况
return False
k+=1
return True #都不冲突,返回True
def queen(xulie,n,ans):
if len(xulie)==n: #有n个皇后,递归结束
ans.append(xulie) #可行棋盘会被加到ans列表中
else:
for i in range(n): #还可加皇后,开始在下一行加入皇后
if buchongtu(xulie,i): #如果i位置可行
queen(xulie+[i],n,ans) #i位置加入棋盘xulie,递归
aa=[]
queen([],n,aa)
return len(aa) #返回列表中有多少个可行的棋盘
76ms,排名65%