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