八皇后问题 - Python 描述 -生成器方法
//state[] 皇后相应的位置
//state[0]==3 表示第一行的皇后在第四列
//检测冲突
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
//递归生成位置
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 queens(num,state+(pos,)):
yield (pos,)+result
//八皇后解决方案数量
len(list(queens(8)))
//打印结果
def prettyprint(solution):def line(pos,length=len(solution)):
return '.'*(pos) + 'X' +'.'*(length-pos-1)
for pos in solution:
print(line(pos))
import random
prettyprint(random.choice(list(queens(8))))