這道題需要用到回溯演算法,現在在這裡先簡單的介紹一下這個演算法:
回溯演算法也叫試探法,它是一種系統地搜尋問題的解的方法。回溯演算法的基本思想是:從一條路往前走,能進則進,不能進則退回來,換一條路再試。用回溯演算法解決問題的一般步驟為:
1、定義乙個解空間,它包含問題的解。
2、利用適於搜尋的方法組織解空間。
3、利用深度優先法搜尋解空間。
4、利用限界函式避免移動到不可能產生解的子空間。
問題的解空間通常是在搜尋問題的解的過程中動態產生的,這是回溯演算法的乙個重要特性。
首先,看乙個簡單的程式;
1 #include 2 #include 3輸出:3 2 14void function(inta)5
11}1213
int main(void)14
1 #include 2 #include 3輸出:1 2 34void function(inta)5
11}1213
int main(void)14
首先第乙個不難理解,第二個,首先進行三次遞迴,分別是function(2),function(1),function(0)=>a=3,a=2,a=1;當到a=1遞迴執行結束,就會接著往下執行,執行printf,所以此時輸出1,然後,返回到上一級遞迴,function(1),執行結束後,再次執行printf,輸出1...
八皇后問題:
八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。計算機發明後,有多種計算機語言可以解決此問題。
1 #include 2 #include 34#define max 8//
定義最大方格 56
int a[max],sum=0;//
定義全域性變數78
int check_function(int n) 16}
17return
0;//
滿足條件返回0
N皇后問題
include define maxqueens 20 define minqueens 4 enum bool typedef struct queendata queendata queendata queens maxqueens 1 int ncount init int init chec...
N皇后問題
採用遞迴回溯法 執行結果 輸入8 對於n皇后解的個數,參考 當n 16時,構造法給出解,參考poj 3239 一 當n mod 6 2 且 n mod 6 3時,有乙個解為 2,4,6,8,n,1,3,5,7,n 1 n為偶數 2,4,6,8,n 1,1,3,5,7,n n為奇數 上面序列第i個數為...
N皇后問題
問題 題目 於西洋棋的玩法,因為皇后所在的位置可以縱向 橫向 兩個斜向四個方向的 捕捉 所以8皇后問題就是要求如何布置8個皇后在8 8的棋盤上而使他們互相無法 捕捉 也就是說不存在兩個皇后同行或同列,或在同一斜線上。而n皇后問題就是如何布置n個皇后在n n棋盤裡使不存在兩個皇后在同行同列和同一斜線上...