n皇后問題是乙個經典的問題,在乙個n*n的棋盤上放置n個皇后,每行乙個並使其不能互相攻擊(同一行、同一列、同一斜線上的皇后都會自動攻擊)。
(注:本文採用一維陣列儲存棋盤,並利用特定性質解決皇后不衝突的問題,新手最好別看,先從二維陣列開始學起,不然會很難受的。)
本題利用回溯法解決n皇后問題,其次,介紹memset的利弊(幾乎花了一下午時間查bug,結果才知道是這裡出問題了)
本文大致思路:儲存n個皇后到chessboard中,從i開始,每次找到乙個可以放入的位置,若該位置不能放,回溯或者退出,若該位置是最後乙個,則要輸出這一種情況,count_num+1.最終結果即滿足了條件
#include #include #include #include //#include //不是c++時int_max的標頭檔案是這個
using namespace std;
//a[i] == j即可確定該處可以有皇后
int chessboard[10];
int n; //皇后數
int chess(int row, int col)
return 1;
}void print()
cout<
小結:讀者可先利用chessboard[0][0]來測一下,就會理解很多了,其次,chessboard中儲存的是路徑.
深入挖掘n皇后:n皇后文字詳解 但是和我**差不多,個人感覺不好理解,還不如直接看**好一點
最後溫馨提醒,別用int_max 初始化陣列,初始化0沒問題,但是如果你你按照我main函式中的memset函式就會出錯,具體看鏈結memset常見錯誤
N 皇后問題 回溯法
n 皇后問題 在 n n 的棋盤上放置彼此不受攻擊的 n 個皇后,任意兩個皇后不同行 不同列 不同斜線。思路 1.因為皇后不能同行,所以,在每一行放置乙個皇后就行 2.當在一行放置皇后的時候 1 順序檢查這一行每乙個位置是否和上面所有的皇后,只要有乙個同列或者在斜線上就不能放置 若找到乙個滿足的,放...
回溯法 n皇后問題
問題描述 在nxn的棋盤上,放置彼此不受攻擊的n個皇后。規則 皇后可以攻擊與之在同一行,同一列,同一斜線上的棋子。以行為主導 不用再判斷是否同行了 演算法設計 1 定義問題的解空間 問題解的形式為n元組 分量xi表示第i個皇后放置在第i行,第xi列。2 解空間的組織結構 m叉樹 3 搜尋解空間 約束...
回溯法 N皇后問題
n 皇后問題研究的是如何將n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。不能相互攻擊就是n個皇后兩兩不能同行同列同對角線。示例 輸入 4 輸出 q 解法 1 q q q.q.解法 2 q q q 解釋 4 皇后問題存在兩個不同的解法。可以利用 回溯法子集樹 模板進行求解,每個節...