八皇后問題python實現

2022-08-16 22:12:15 字數 1387 閱讀 5574

八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變為n×n,而皇后個數也變成n。當且僅當 n = 1 或 n ≥ 4 時問題有解。

具體可以參考:

**參考《python程式設計基礎》

import random

#衝突檢查,在定義state時,採用state來標誌每個皇后的位置,其中索引用來表示橫座標,基對應的值表示縱座標,例如: state[0]=3,表示該皇后位於第1行的第4列上

defconflict

(state, nextx):

nexty = len(state)

for i in range(nexty):

#如果下乙個皇后的位置與當前的皇后位置相鄰(包括上下,左右)或在同一對角線上,則說明有衝突,需要重新擺放

if abs(state[i]-nextx) in (0, nexty-i):

return

true

return

false

#採用生成器的方式來產生每乙個皇后的位置,並用遞迴來實現下乙個皇后的位置。

defqueens

(num, state=()):

for pos in range(num):

ifnot conflict(state, pos):

#產生當前皇后的位置資訊

if len(state) == num-1:

yield (pos, )

#否則,把當前皇后的位置資訊,新增到狀態列表裡,並傳遞給下一皇后。

else:

for result in queens(num, state+(pos,)):

yield (pos, ) + result

#為了直觀表現棋盤,用x表示每個皇后的位置

defprettyprint

(solution):

defline

(pos, length=len(solution)):

return

'. ' * (pos) + 'x ' + '. '*(length-pos-1)

for pos in solution:

print line(pos)

if __name__ == "__main__":

prettyprint(random.choice(list(queens(8))))

最後隨機列印出符合規則的皇后如下所示:

Python實現八皇后問題

八皇后問題是指8 8位的棋盤上,擺8個皇后,使得任意乙個皇后不在其他皇后的同一橫線上,同一豎線上,同一斜線 包括右上到左下斜線和左上到右下斜線 上。這個問題是乙個經典的遞迴問題。八皇后問題主函式 n 0 總的解的數量 defehh sovle deep,graph,path 解決八皇后問題的函式 f...

八皇后問題python實現

def check x,y 對當前行的所有行進行 for row in range x column queens row 不能是同一列 if y column return false 對角線 if abs x row abs y column return false return true d...

python實現八皇后

要求 在 8 8 的棋盤上,8 個皇后不在同行 同列 同對角線。1 定義衝突 def conflict state,nextx nexty len state for i in range nexty if abs state i nextx in 0,nexty i return true ret...