问题:在8X8的国际象棋棋盘上摆放8个皇后,要求8个皇后不能互相攻击,即任意两个皇后都不能处于同一行,同一列或者同一斜线上。设计一个摆放方案。
代码:
n=8
x=[]
y=[]
#冲突检测
def conflict(k):
global x
for i in range(k):
if x[i]==x[k] or abs(x[i]-x[k])==abs(i-k):
return True
return False
#子集树模板
def queens(k):
global n,x,y
if k>=n: #超出最底行
y.append(x[:])
else:
for i in range(n):
x.append(i)
if not conflict(k):
queens(k+1)
x.pop()
#显示结果
def show(x):
global n
for i in range(n):
print('. '*(x[i])+'Q '+'. '*(n-x[i]-1))
if __name__ == '__main__':
queens(0)
print(y[-1])
print('八皇后在棋盘的位置:')
show(y[-1])
运行结果:
[7, 3, 0, 2, 5, 1, 6, 4]
八皇后所在位置:
. . . . . . . Q
. . . Q . . . .
Q . . . . . . .
. . Q . . . . .
. . . . . Q . .
. Q . . . . . .
. . . . . . Q .
. . . . Q . . .
留言与评论(共有 0 条评论) “” |