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)
    原文作者:回溯法
    原文地址: https://blog.csdn.net/xuelucky/article/details/80979044
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞