首先判断下一个皇后与当前皇后是否冲突:
def conflict(state,nextY):
nextX=len(state)
for i in range(nextX):
if abs(state[i]-nextY) in (0,nextX-i):
return True
return False
其中nextX是代表下一个皇后的水平位置,nextY代表下一个皇后的垂直位置,当下一个皇后与上一皇后的水平距离为0(列相同),或者等于垂直距离(对角线)返回true,否则为false
然后写主程序,利用递归完成:
def queens(num=8,state=()):
for pos in range(num):
if not conflict(state,pos):
if len(state)==num-1:
yield (pos,)
else:
for result in quuens(num,state+(pos,)):
yield (pos,)+result