八皇后問題的遞迴和回溯問題

2021-07-15 15:14:07 字數 766 閱讀 7647

在8×

8的西洋棋上擺放八個皇后,使其不能相互攻擊,即任意兩個皇后不得處在同一行、同一列或者同一對角斜線上。下圖中的每個黑色格仔表示乙個皇后,這就是一種符合條件的擺放方法。請求出總共有多少種擺法。

此題用到了遞迴和回溯

#include

int val[10][10];

int count = 0;//方法數 

bool judge(int row, int column)

//對角線 

for(int i = row, j = column; i >= 0 && j >= 0; --i, --j)

//反對角線 

此題有兩種方法 :1就是先找當前行可以放皇后的地方,然後再找下一行可以放皇后的地方,如果找不到就回溯到上一行,此前選的那個位置就不能再放了,只能找其他的地方去放皇后知道發方皇后的數量到8個就行了;

2第二種方法就是先去找一行一行的皇后,找到所有的皇后後,在從最後乙個清空。從最後一行去找符合的新的皇后

回溯 八皇后問題(遞迴和非遞迴)

8皇后問題 如何在 8 x 8 的西洋棋棋盤上安排 8個皇后,使得沒有兩個皇后能互相攻擊?如果兩個皇后處在同一行 同一列或同一條對角線上,則她們能互相攻擊。解向量為長度為8 的陣列,記為 solution 因為共有 8個皇后,而棋盤剛好為 8 8,所以每一行肯定會有乙個皇后,那麼我們約定 solut...

八皇后問題的回溯和遞迴方法

用一維陣列記錄皇后的位置。陣列的下標代表皇后所處的行,下標對應的值代表皇后所處的列。用count記錄皇后的個數,當count小於queen數時,在迴圈體中尋找合適位置的queen。尋找queen 從列1依次尋找,滿足條件則count 1,繼續從列1處尋找下乙個queen。如全部找完沒找到合適的位置,...

八皇后問題(遞迴,回溯)

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