Python算法之八皇后

Python算法之八皇后

问题:在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 条评论) “”
   
验证码:

相关文章

推荐文章