import random
#衝突檢查,在定義state時,採用state來標誌每個皇后的位置,其中索引用來表示橫座標,基對應的值表示縱座標,例如: state[0]=3,表示該皇后位於第1行的第4列上
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, 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
#為了直觀表現棋盤,用x表示每個皇后的位置
def prettyprint(solution):
def line(pos, length=len(solution)):
return '. ' * (pos) + 'x ' + '. '*(length-pos-1)
for pos in solution:
print line(pos)
if __name__ == "__main__":
queens(8)
prettyprint(random.choice(list(queens(8))))
python 八皇后問題
矩陣表示棋盤 字典queenlist表示已放置成功的皇后,key值代表列,value代表行 encoding utf 8 import numpy as np 判斷該位置是否為危險位置 def issafe col,row,queenlist for tempcol in range col tem...
python 八皇后問題
import random 衝突檢查,在定義state時,採用state來標誌每個皇后的位置,其中索引用來表示橫座標,基對應的值表示縱座標,例如 state 0 3,表示該皇后位於第1行的第4列上 def conflict state,nextx nexty len state for i in r...
Python實現八皇后問題
八皇后問題是指8 8位的棋盤上,擺8個皇后,使得任意乙個皇后不在其他皇后的同一橫線上,同一豎線上,同一斜線 包括右上到左下斜線和左上到右下斜線 上。這個問題是乙個經典的遞迴問題。八皇后問題主函式 n 0 總的解的數量 defehh sovle deep,graph,path 解決八皇后問題的函式 f...