回朔法 八皇后問題

2022-05-06 02:12:08 字數 792 閱讀 8066

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

假設八個皇后的位置分別用x1到x8表示,那麼xi可以取的值為1~8,因此,問題的解可以用向量

{x1,x2,x3,x4,x5,x6,x7,x8}表示,解空間包含$8^8$個向量。

回朔法求解**如下:

#include#include#define max 100

int a[max];//儲存各個皇后的擺放位置

void backdate(int k,int n);//尋找第k個皇后的正確位置(前k-1個皇后的位置已經確定)

int check(int k);//檢查第k個皇后的位置是否合法

int count = 0;//計數器,記錄解法個數

int main()

void backdate(int k,int n)

for(j=1;j<=n;j++)//尋找第k個皇后的正確位置,從1開始逐個試探

}return;

}int check(int k)

{ int i=1;

for(i=1;i程式執行結果:

不考慮對稱,八皇后問題的解有92種,以上結果隨便挑乙個都可以驗證,結果是正確的。

八皇后問題的回朔法求解

1.問題背景 前幾天上演算法課的時候老師簡單介紹了一下八皇后問題,課後感覺這個問題挺有趣的所以自己編了一下,發現對於我這種初學者來說還是有一定的難度,下面我詳細分析一下這個問題。八皇后問題,是乙個古老而著名的問題,是 回溯演算法 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8...

python回朔演算法解八皇后問題

八皇后問題的解題思路 總共有92種解法,這裡舉例一種 def place x,k 判斷是否衝突 for i in range 1,k x i x k 判斷是否為同一行 abs x i x k abs i k 判斷是否在k個的對角線上 if x i x k or abs x i x k abs i k...

回朔法簡單總結

冷血之心的部落格 回溯法 探索與回溯法 是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為 回溯點 在回溯法中,每次擴大當前部分解時,都面臨乙個可...