python--用回溯法(子集树)解n皇后问题

n皇后问题:如何能够在 n×n 的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。

def backTrack(t,n):#核心代码
    if t == n:
        outPut()
        return
    else:
        for i in range(n):
            a[t],a[i]=a[i],a[t]#通过不断的交换找到所有可能解
            if(legal(t)):
                backTrack(t+1,n)
            a[t],a[i]=a[i],a[t]
def outPut():#自定义输出函数
    global count
    count+=1
    print(str(count) + ":")#表示第n个解
    for i in range(n):
        print(('(%d,%d)' % (i,a[i]+1)),end=' ')
    print()
def legal(t):#判断是否在一条斜线上
    for i in range(t):
        if abs(t - i) == abs(a[t] - a[i]):
            return False
    return True
if __name__ == '__main__':
    n=int(input())
    a=[i for i in range(n)]
    count=0
    backTrack(0,n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值