關於西洋棋皇后的遞迴問題 經典為8皇后

2021-05-23 19:13:14 字數 1696 閱讀 3146

從大一開始學c以來,看了不少經典的變成題目,卻單單沒有看到關於8皇后的題目,杯具!!!

這一段時間開始學習linux c和python,在看python書籍的時候,突然看到了這麼一道8皇后的題目,興趣來了。

也不知道是自己的水平下降還是確實對於西洋棋不夠了解,居然在理解題意的時候就出現了問題,下面,先將題目列印 出來:

題目:

在乙個8×8西洋棋盤上,有8個皇后,每個皇后佔一格;要求皇后間不會出現相互「攻擊」現象,即不能有兩個皇后處於同一行,同一列或同一對角

線上,問共有多少中不同的方法。

i(0-7)

0    0    0   0   0   0   0   0

0    0    0   0   0   0   0   0

0    0    0   0   0   0   0   0

j(0-7)    0    0    0   0   0   0   0   0

0    0    0   0   0   0   0   0

0    0    0   0   0   0   0   0

0    0    0   0   0   0   0   0

0    0    0   0   0   0   0   0

正對角線:我們將和符號 『 / 』乙個方向的稱為正對角線。    特性: 對角上i+j值相同  ,範圍在0-14

反對角線:於『 / 』方向相同的稱為反對角線。     特性:對角上 i-j 的值相同   , 範圍在-7~0~7,   我們用i-j+7將 範圍變為 0- 14

根據條件,同一行,同一列或同一對角線不能有兩個皇后, 

我們選擇行 row 來存放在該行中,皇后應該在的列位置。如row [2, 4, 5, 1 , ……],意思是在第0行第2列有乙個皇后,在第1行第4列有乙個皇后。

使用col 來存放表示該列是否有皇后, 1表示沒有, 0表示有

用pos_dig來存放正對角是否有皇后, pos_dig = [1, 1, 1, 1, 1, 1, 1, 1, ……]     0-14

用nag_dig來存放反對角是否有皇后,    nag_dig = [1, 1, 1, 1, 1, 1, 1, 1,…… ]     0-14

宣告 row, col , nag_dig ,   pos_dig, count

初始化

從第0行開始遞迴:

第0列從第0行開始分別於0到7行進行對比,判斷皇后位置, 到第7行時開始輸出row, count+1, 將col,nag_dig, pos_dig回歸初始狀態

第1列從第0行開始分別於0到7行進行對比,判斷皇后位置,    到第7行時開始輸出row, count+1,

將col,nag_dig, pos_dig回歸初始狀態

……

輸出count

python**如下:

西洋棋皇后問題

1 八皇后問題 2 求解思路 3 實現 include include object.h include linklist.h using namespace std using namespace mylib template class queuesolution public object s...

馬的移動問題 西洋棋BFS

輸入包含多組測試資料。每組輸入由兩個方格組成,每個方格包含乙個小寫字母 a h 表示棋盤的列號,和乙個整數 1 8 表示棋盤的行號。對於每組輸入,輸出一行 to get from xx to yy takes n knight moves.e2 e4 a1 b2 b2 c3 a1 h8 a1 h7 ...

皇后問題 經典遞迴

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。上圖是乙個合格的皇后棋盤。如果要計算可以擺放的種數和求出擺放的情況,解決方案就是,每次按行搜尋,然後搜尋中確保...