八皇后问题
作者:互联网
八皇后问题
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