其他分享
首页 > 其他分享> > 八皇后问题

八皇后问题

作者:互联网

八皇后问题

1 问题描述

 在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。

2 代码实现

递归回溯

def queens(num=8,state=()):
    def conflict(state,nextX):
        nextY=len(state)
        for i in range(nextY):
            if abs(state[i]-nextX) in (0,nextY-i):
                return True
        return False
    
    for pos in range(num):
        if not conflict(state,pos):
            if len(state) == num-1:
                yield (pos,)
            else:
                for result in queens(num,state+(pos,)):
                    yield (pos,)+result

if __name__=="__main__":
    print(list(queens()))

 

标签:__,pos,问题,state,num,皇后,nextY,queens
来源: https://blog.csdn.net/zhangxun2007/article/details/112689986