深度優先搜尋解決八皇后問題

2021-09-29 21:23:37 字數 854 閱讀 8913

八皇后問題是什麼:

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

高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。計算機發明後,有多種計算機語言可以解決此問題。

題解:

#include

#include

using

namespace std;

int a[9]

=;int count =0;

bool

canplace

(int step,

int pos)

return

true;}

void

dfs(

int step)

for(

int i =

1; i <=

8; i++)}

}int

main()

解析:

陣列a記錄棋子擺放位置,例如a[3] = 5表示在第三的第五格放了棋子,任意兩個皇后都同一斜線上,意味著(a[step]-a[i])/(step-i) 的絕對值不能是1,同一列好理解,a[step] != a[i],同一行不用考慮,因為我們一行只放乙個棋子。

深度優先搜尋解決全排列問題

題目 假如有編號為1 2 3的3張撲克牌和編號為1 2 3的3個盒子。現在需要將這3張撲克牌分別放到3個盒子裡,並且每個盒子有且只能放一張撲克牌。那麼一共有多少種不同的排法?及注釋 include 全域性變數,陣列元素值自動初始化為0 int a 10 充當盒子編號 int book 10 用boo...

廣度優先搜尋解決八數碼問題

程式描述 基於盲目搜尋策略的寬度優先搜尋方法 include include include include include include include using namespace std define n 9 九宮格總數字 陣列定義 0 9階乘定義 const int jc n 1 0 9...

八皇后(遞迴 深度優先搜尋)

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。1854年在柏林的象棋雜誌上不同的作者發表了...