n皇后問題 回溯法

2022-02-23 06:10:45 字數 1107 閱讀 9958

具體問題如下圖

先看一下4*4的回溯過程

程式結束條件: 一組解:設標誌,找到一解後更改標誌,以標誌做為結束迴圈的條件。 所有解:k=0

判斷約束函式判斷第k個後能不能放在x[k]處 兩個皇后不能放在統一斜線上: 若2個皇后放置的位置分別是(i,j)和(k,l), 且 i-j = k -l 或 i+j = k+l,則說明這2個皇后處於同一斜線上。

下面是利用遞迴和非遞迴實現的**

1 #include2

using

namespace

std;

3intn;4

int x[100];5

int sum=0;6

7/*8判斷第k個後能不能放在x[k]處

9兩個皇后不能放在統一斜線上:

10若2個皇后放置的位置分別是(i,j)和(k,l),

11且 i-j = k -l 或 i+j = k+l,則說明這2個皇后處於同一斜線上。

12*/

13void

output()

1819}20

int place(int

k)25

return1;

26}27void backtrace(int t,int n)

32else38}

3940}41

}4243void backtrace1(int n)

52if(x[k]<=n)

57else

61 }else64}

65}66int

main()

67

執行結果如下

皇后個數要大於3才有可行結

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 皇后問題存在兩個不同的解法。可以利用 回溯法子集樹 模板進行求解,每個節...