def conflict(state,nextx):
'定義沖突函數(shù),state為元組痪寻,nextx為下一個(gè)皇后的水平位置,nexty為下一個(gè)皇后的垂直位置'
nexty = len(state)
for i in range(nexty):
if abs(state[i]-nextx) in (0,nexty-i):#若下一個(gè)皇后和前面的皇后列相同或者在一條對(duì)角線上虽惭,則沖突
return True
return False
def queens(num=8,state=()):
'八皇后問(wèn)題橡类,這里num表示規(guī)模'
for pos in range(num):
if not conflict(state,pos):#位置不沖突
if len(state) == num - 1:#若是最后一個(gè)皇后,則返回該位置
yield (pos,)
else:#若不是最后一個(gè)皇后芽唇,則將該位置返回到state元組并傳給后面的皇后
for result in queens(num,state + (pos,)):
yield (pos,) + result