最近演算法老師講到了n皇后問題,我順便在這邊總結一下他的思路,主要還是深搜加剪枝.
解題思路:用陣列c儲存每個皇后在下標行中的位置(即列),然後進行深搜加剪枝判斷,如果不符合條件了,則回朔.思路很簡單,下面的**包含兩種解法.
#include #include #define m 8 //修改此處改變皇后的基數
bool check(int *c,int addr);
void q(int k);
void display(int *c,int n);
void qt(int k);
int c[20]=;
int main(void)
bool check(int *c,int k)
return true;
}void display(int *c,int n)
//遞迴解法
void q(int k) //k代表深度
else
}c[k] = 0; }}
//非遞迴解法
void qt(int k) //k代表深度
else
}} c[k] = 0; //向上回朔,c[k]要初始化,防止資料汙染
k--; //向上
}}
N皇后問題的遞迴與非遞迴解法
n皇后問題 n皇后問題是將n個皇后放置在n n的棋盤上,皇后彼此之間不能相互攻擊。給定乙個整數n,返回所有不同的n皇后問題的解決方案。每個解決方案包含乙個明確的n皇后放置布局,其中 q 和 分別表示乙個女王和乙個空位置。樣例對於4皇后問題存在兩種解決的方案 q.solution 1 q q.q.q....
遞迴與N皇后問題
遞迴的基本概念 乙個函式呼叫其自身,就是遞迴 遞迴的作用 1 替代多重迴圈 2 解決本來就是用遞迴形式定義的問題 3 將問題分解為規模更小的子問題進行求解 一行只能有乙個皇后,這個根據遊戲規則中的皇后的勢力就可以得知。首先先讓a皇后放在左上角 0,0 b皇后再從第二行找到合適的位置,以此類推c皇后在...
N皇后非遞迴實現
馬上上課了,以後有時間再細說。回溯 偷個懶,從老師ppt上拷過來 狀態樹 解空間樹 回溯法的求解過程實質上是乙個先序遍歷一顆狀態樹的過程,只是這棵狀態樹不是預先建立的,而是隱含在遍歷過程中。可以通過畫乙個四皇后的解空間樹來很嗨的理解,理解回溯的過程,有時間就更 約束函式 節點與解 完全解 部 死節點...