python實現N皇后問題

2021-10-25 04:09:12 字數 1286 閱讀 3574

首先,n皇后是乙個非常經典的遞迴+回溯的問題。

然後,寫乙個判斷函式check來判斷某個點是不是可以放置的點是該演算法的重點

# check函式,用來判斷點[row, col]是否可以放置皇后

defcheck

(board, row, col)

:for i in

range

(row)

:'''

上文已經指出,board用來儲存結果,其下標值表示皇后所在的行,改下標儲存的值表示皇后的列。

所以判斷是否同列的方法是:abs(board[i] - col) == 0

判斷是否在正對角線或反對角線的方法是:abs(board[i] - col) == abs(row - i),即斜率的絕對值是否等1

'''ifabs

(board[i]

- col)==0

orabs

(board[i]

- col)

==abs

(row - i)

:return

false

return

true

defeight_queen

(board, row)

: board_len =

len(board)

if row >= board_len:

''' 列印結果,1表示放置皇后

而且只需要一維陣列就可以表示結果,所以只需要用到col就可以了

'''for _, col in

enumerate

(board)

:print

(' 0 '

* col +

' 1 '

+' 0 '

*(board_len-

(col +1)

))print(''

)for col in

range

(board_len)

:if check(board, row, col)

: board[row]

= col

# 放置第row行的皇后之後,繼續放置第row+1行的皇后

eight_queen(board, row+1)

if __name__ ==

"__main__"

:# 初始化乙個4皇后棋盤

board =[0

]*4# 從第一行開始放置皇后

eight_queen(board,

0)

八皇后 N皇后問題 遞迴實現

八皇后問題,即在乙個棋盤上,每行都可以放置乙個皇后,但每個皇后都不能影響其他皇后的安全,即所有皇后的位置不能在同一直線上 解決問題方法及思想 遞迴 在使用遞迴之前首先要準備好兩個函式實現 1.判斷此時此刻位置是否安全 只需要判斷元素上方,左上方,右上方是否安全,且只要有乙個位置不安全,則結束判斷 2...

java實現N皇后問題

n皇后問題描述 將 n 個皇后擺放在乙個 n x n 的棋盤上,使得每乙個皇后都無法攻擊到其他皇后。深度優先遍歷的典型案例。程式輸入 n的個數 需 4 棋盤上任意乙個位置 程式輸出 滿足問題需求的棋盤座標 程式 如下 node類用於封裝皇后的棋盤位置資訊 public class node publ...

遞迴實現N皇后問題

因為每行只能放置乙個皇后,故可用一維陣列a儲存 第i行皇后的列數,即 a i j 表示第i行的皇后位於第j列。為方便起見,下標全部從1開始。它可以實時表示擺放的狀態。遞迴函式 queen i 可理解為 我們已經無衝突的擺放好了前 i 1 行的皇后並在陣列a中儲存,現在開始擺放第i行的皇后。對於第i行...