N皇后非遞迴實現

2021-08-31 16:07:07 字數 786 閱讀 6824

馬上上課了,以後有時間再細說。。。。。。

回溯:(偷個懶,從老師ppt上拷過來)

狀態樹(解空間樹)

回溯法的求解過程實質上是乙個先序遍歷一顆狀態樹的過程,只是這棵狀態樹不是預先建立的,而是隱含在遍歷過程中。

(可以通過畫乙個四皇后的解空間樹來很嗨的理解,理解回溯的過程,有時間就更)

約束函式

節點與解

完全解

死節點,回溯

#include#include#includeusing namespace std;

int numsum=0;//記錄擺法個數

bool check(int arr,int k);//a[1~n]存放可以取的值

int k=1;

while(k>=1)

}return true;

}public static void print(int arr,int n)

system.out.println();

}public static void main(string args)

else if(check(arr,k))

}arr[k] = 0;

k--;}}

}

N皇后的遞迴和非遞迴實現

著名的八皇后問題大家應該都知道,不過以防萬一這裡還是再說一下 八皇后問題是乙個以西洋棋為背景的問題其內容為求解如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?即任意兩個皇后都不能處於同一條橫行 縱行或斜線上。而n皇后顧名思義就是同樣的規則擴充套件到n個皇后。...

N皇后問題(遞迴與非遞迴解法)

最近演算法老師講到了 皇后問題,我順便在這邊總結一下他的思路,主要還是深搜加剪枝 解題思路 用陣列 儲存每個皇后在下標行中的位置 即列 然後進行深搜加剪枝判斷,如果不符合條件了,則回朔 思路很簡單,下面的 包含兩種解法 include include define m 8 修改此處改變皇后的基數 b...

遞迴實現N皇后問題

因為每行只能放置乙個皇后,故可用一維陣列a儲存 第i行皇后的列數,即 a i j 表示第i行的皇后位於第j列。為方便起見,下標全部從1開始。它可以實時表示擺放的狀態。遞迴函式 queen i 可理解為 我們已經無衝突的擺放好了前 i 1 行的皇后並在陣列a中儲存,現在開始擺放第i行的皇后。對於第i行...