描述
对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b 1b 2...b 8,其中b i为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。
2 1 92
样例输出
15863724 84136275
def queen(A, cur=0):
if cur==len(A):
#这里len(A)的值为8,当发现cur==8时候,
# 说明前面的0-7都已经找到了正确的位置,
# 这就是一个满足要求的结果
b.append(list(A))
else:
for col in range(len(A)):
A[cur] = col #表示把第cur行的皇后放在col列上
ok = True #用ok这个值来记录是否冲突
#以下这个for 循环判断是判断 第cur行是否更前面的皇后冲突
for r in range(cur):
if A[r]==col or r-A[r]==cur-A[cur] or r+A[r]==cur+A[cur]:#判断是否跟前面的皇后冲突
ok = False ##一旦发现冲突标记一下
break ##一旦发现冲突标记一下之后停止计算
if ok:
#若是发现了跟前面的皇后冲突了,说明当前cur行是不能放在col列上面的,
# 于是就 进行下一次的 for col in range(len(A))循环,也就是去测下一个col值行不行
#若是发现当前行的cur的col没有与前面的冲突,那么就开始对下一行寻找合适放置位置即寻找col值
queen(A,cur+1)
b=[] #用来存储所有的解决方案
queen([0]*8, 0)
#以下操作实现题目的输出要求
n=int(input())
for i in range(n):
x=int(input())
a=b[x-1]
for j in range(8):
print(a[j]+1,end="")
print()