八皇后 n皇后 問題 python 演算法的理解

2021-10-08 19:08:10 字數 903 閱讀 6339

問題表述為:在8×8格的西洋棋上擺放8個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。答案是92種

可以看看遍歷過程 方便理解

c =

0def queen

(a, cur=0)

:if cur ==

len(a)

: #基本結束條件

print

(a) global c

c +=1

print

('這是第{}種解決方法'

.format

(c))

return

for col in range

(len

(a))

: #從第0列開始遍歷到第7列 行是不會有衝突的了

a[cur]

=col #試著擺在這一列 衝突的話有break。(這個效果比較二維陣列的好處就是:不用做復原的動作 如果當前位置不是 直接覆蓋該值即可)

flag = true

for row in range

(cur)

:if a[row]

== col or

abs(col - a[row]

)== cur - row: #判斷條件 看看列衝突 和 對角衝突

flag = false #也就是說 這一列不能擺

break

if flag: #這一列能擺 擺上

queen

(a, cur+

1) #減少問題規模 遞迴呼叫

queen

([none]*8

)

參考網頁

n皇后問題與八皇后

這裡的n皇后問題指在乙個nxn的棋盤上放置n個棋子,使得每行每列和每條對角線上都只有乙個棋子,求其擺放的方法數。當且僅當n 1 或 n 4 時問題有解。class queens vector vector res int result 0 bool test int cur for int i 0 ...

八皇后(n皇后)

n皇后問題是經典的遞迴型問題。輸入說明 n代表皇后的數量 輸出說明 每行n個數字,一行代表乙個解。例如2413代表第1行皇后放在第2列,第2行皇后放在第4列,第3行皇后放在第1列,第4行皇后放在第3列。數字都是從1開始的。樣例輸入 4樣例輸出 2413 3142 include include us...

八皇后 n皇后 2n皇后

n n 的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入 n n 個黑皇后和 n n 個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n n 小於等於 88。輸入的第一行為乙個整數 n n,表示棋盤的大...