while 1: #一直循环
n = input('Input N:') #输入皇后个数
if n.lower() in ('exit'): #输入exit退出
break
n = int(n)
queenList = [0]*n #初始化一个长度为n的list,用于存放皇后,值代表皇后位置
#因为每行只可能有1个皇后,所以没必要用2维list
def setQueen(idx): #递归,用于放置每一行的queen,idx是行号
for i in range(n): #皇后位置从0到n-1取值
isOk=True
for j in range(idx): #循环判断这一行之前的所有行
if i in (queenList[j],queenList[j]-idx+j,queenList[j]+idx-j):#在直线和斜线上
isOk=False
break
if isOk: #如果跟之前的行都不在线上
queenList[idx]=i #在此位置放置一个皇后
if idx==n-1: #已经是最后一行
print(queenList) #打印结果
else: #不是最后一行
setQueen(idx+1) #继续放置下一行
setQueen(0) #从第一行开始放置
Python解N皇后问题
最新推荐文章于 2024-05-08 15:06:49 发布