回溯法解N皇后問題

2021-06-11 01:35:28 字數 1043 閱讀 8646

回溯法解n皇后問題,要求就不說了,直接說思路和上**!

/* * 回溯法解n皇后問題 

* 使用乙個一維陣列表示皇后的位置 

* 其中陣列的下標表示皇后所在的行 

* 陣列元素的值表示皇后所在的列 

* 這樣設計的棋盤,所有皇后必定不在同一行 

* * 假設前n-1行的皇后已經按照規則排列好 

* 那麼可以使用回溯法逐個試出第n行皇后的合法位置 

* 所有皇后的初始位置都是第0列 

* 那麼逐個嘗試就是從0試到n-1 

* 如果達到n,仍未找到合法位置 

* 那麼就置當前行的皇后的位置為初始位置0 

* 然後回退一行,且該行的皇后的位置加1,繼續嘗試 

* 如果目前處於第0行,還要再回退,說明此問題已再無解 

* * 如果當前行的皇后的位置還是在0到n-1的合法範圍內 

* 那麼首先要判斷該行的皇后是否與前幾行的皇后互相衝突 

* 如果衝突,該行的皇后的位置加1,繼續嘗試 

* 如果不衝突,判斷下一行的皇后 

* 如果已經是最後一行,說明已經找到乙個解,輸出這個解 

* 然後最後一行的皇后的位置加1,繼續嘗試下乙個解 

*//* 

* 檢查第n行的皇后與前n-1行的皇后是否有衝突 

* 發生衝突的充分必要條件是: 

* a) 兩皇后處於同一列,即a[i] == a[n] 

* b) 兩皇后處於同一斜線,即|a[i] - a[n]| == |i - n| == n - i **

bool conflict(int k)

*#include

#include

int x[100];

bool conflict(int k)

int queen(int n)

else if(x[k]<=n&&k

k++;

else  //如果達到n,仍未找到合法位置 ,那麼就置當前行的皇后的位置為初始位置0 ,並回退上一行

}return count;

}void main()

回溯法解n皇后問題

n皇后問題 在n n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n皇后問題等價於在n n格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一列或同一斜線上。輸出可行的棋盤排布,以及可行解的個數。用回溯法解n皇后問題,以下給出遞迴回溯...

N 皇后問題 回溯法

n 皇后問題 在 n n 的棋盤上放置彼此不受攻擊的 n 個皇后,任意兩個皇后不同行 不同列 不同斜線。思路 1.因為皇后不能同行,所以,在每一行放置乙個皇后就行 2.當在一行放置皇后的時候 1 順序檢查這一行每乙個位置是否和上面所有的皇后,只要有乙個同列或者在斜線上就不能放置 若找到乙個滿足的,放...

回溯法 n皇后問題

問題描述 在nxn的棋盤上,放置彼此不受攻擊的n個皇后。規則 皇后可以攻擊與之在同一行,同一列,同一斜線上的棋子。以行為主導 不用再判斷是否同行了 演算法設計 1 定義問題的解空間 問題解的形式為n元組 分量xi表示第i個皇后放置在第i行,第xi列。2 解空間的組織結構 m叉樹 3 搜尋解空間 約束...