回溯法求N皇后問題

2021-08-27 15:34:50 字數 1063 閱讀 9815

回溯法

:是一種選優搜尋法, 回溯法從開始節點(根節點)出發,以深度優先方式搜尋整個解空間。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個

狀態的點稱為「回溯點」。

n皇后問題描述:在n乘n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之在同行或同列或同一斜線上的棋子。n後問題等價於在n 乘 n格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一列或同一斜線上。

求解思路:有序地從第 1 行的第 1 列開始,嘗試放上乙個皇后,然後再嘗試第 2 行的第幾列能夠放上乙個皇后,如果第 2 行也放置成功,那麼就繼續放置第 3 行,如果此時第 3 行沒有一行可以放置乙個皇后,說明目前為止的嘗試是無效的(即不可能得到最終解),那麼此時就應該回溯到上一步(即第 2 步),將上一步(第 2 步)所放置的皇后的位置再重新取走放在另乙個符合要求的地方…如此嘗試性地遍歷加上回溯,最後得到和規則的解。

package 演算法實驗;

/** * n皇后類

* 回溯法求n皇后

* */

public class nqueens

else

else k--;//回溯

}

} /**

* 判斷放置皇后的約束條件的方法

* @param k

* @return

*/public boolean place(int k){

for(int j=1;j當n=4時,執行結果是:

4位皇后的位置是:

(1,2) (2,4) (3,1) (4,3)

(1,3) (2,1) (3,4) (4,2)

當n=6時,執行結果是:

6位皇后的位置是:

(1,2) (2,4) (3,6) (4,1) (5,3) (6,5)

(1,3) (2,6) (3,2) (4,5) (5,1) (6,4)

(1,4) (2,1) (3,5) (4,2) (5,6) (6,3)

(1,5) (2,3) (3,1) (4,6) (5,4) (6,2)

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