試探回溯法(N皇后問題)

2021-10-04 22:03:33 字數 1377 閱讀 8579

然後影響速度的主要是函式中的checkout函式,我使用的是遍歷棧中所有皇后元素與當前皇后元素比對的方式,在棧中資料量龐大是時候似乎效率略低,這樣導致我的函式在計算n=9,10之類的方格時已需要數秒時間。然而鄧公的dsacpp中用的是vector繼承的find函式,相對來說速度比我的快一點,不過基本過了11之後時間會逐步加長,看來本人的此演算法的健壯性似乎並不高,還需要一些改進。

下面是相關的**

#include

#include

#include

using namespace std;

struct queen

bool operator

(queen const

&q)const

bool operator!=

(queen const

&q)const};

intcheckout

(stack

&solu, queen &q)

return num;}

tuple<

int,

int>

placequeens

(int n)

else

if(n > q.y)

//到了這一步,即代表此時的位置是符合要求的,只需要判斷此時是否越界即可}}

while((

0< q.x)

||(q.y < n));

//所有分支均以或窮舉或剪枝後 //所有的用例測試到最後,肯定就到達了q.x=0,q.y=n的地方,故跳出

tuple<

int,

int>

tmm();

return tmm;}

intmain_****anhuisufa()

} 程式執行思路:迴圈輸入n,輸出x解的個數在y次試探中查詢n個皇后(以及棋盤大小),問題就是從10開始速度明顯變了慢了很多= =

最終的結果如下:

然後影響速度的主要是函式中的checkout函式,我使用的是遍歷棧中所有皇后元素與當前皇后元素比對的方式,在棧中資料量龐大是時候似乎效率略低,這樣導致我的函式在計算n=9,10之類的方格時已需要數秒時間。然而鄧公的dsacpp中用的是vector繼承的find函式,相對來說速度比我的快一點,不過基本過了11之後時間會逐步加長,看來本人的此演算法的健壯性似乎並不高,還需要一些改進。

下面是相關的**

#include

#include

#include

using namespace std;

用試探回溯法解決N皇后問題

學校資料結構的課程實驗之一。資料結構 其實只用了乙個二維陣列 演算法 深度優先搜尋,試探回溯 需求分析 設計乙個在控制台視窗執行的 n皇后問題 解決方案生成器,要求實現以下功能 由n n個方塊排成n行n列的正方形稱為n元棋盤。如果兩個皇后位於n元棋盤上的同一行 同一列或同一對角線上,則稱它們在互相攻...

N 皇后問題 回溯法

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

回溯法 n皇后問題

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