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

2021-08-19 14:46:41 字數 657 閱讀 9967

最近演算法老師講到了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上拷過來 狀態樹 解空間樹 回溯法的求解過程實質上是乙個先序遍歷一顆狀態樹的過程,只是這棵狀態樹不是預先建立的,而是隱含在遍歷過程中。可以通過畫乙個四皇后的解空間樹來很嗨的理解,理解回溯的過程,有時間就更 約束函式 節點與解 完全解 部 死節點...