用棧 回溯 非遞迴解決N皇后問題

2021-07-10 23:43:00 字數 1091 閱讀 9140

問題及**:

/*

* 檔名稱:queen.cpp

* 作 者:單昕昕

* 完成日期:2023年4月4日

* 版 本 號:v1.0

*/#include #include #include #include using namespace std;

const int maxsize=400;

typedef struct linknode//順序棧

sqstack;

sqstack *st;

void initstack(sqstack *&s)//初始化

bool push(sqstack *&s,int e)//壓入棧

bool pop(sqstack *&s)//移除棧頂元素

bool gettop(sqstack *s,int &e)//取棧頂元素

bool stackempty(sqstack *s)//判斷棧是否為空

void destroystack(sqstack *&s)//銷毀棧

bool check(int *qu, int t)//能放返回真,否則為假

else//仍需要試探}}

}delete queen;//釋放動態陣列

free(st);//銷毀棧

return 0;

}

執行結果:

思路:queen[row]陣列記錄第row行上皇后的列位置;

st棧記錄當前行數;

從第0行開始,依次試探0-n-1列;

當row==n-1說明全部成功放置皇后;

當queen[row]>=n說明當前行下,各列試探完畢,都不能成功放置,所以要回溯到上一行,將當前行出棧。

回溯法解決N皇后問題 遞迴與非遞迴求解

回溯法其實也是一種搜尋演算法,它可以方便的搜尋解空間。回溯法解題通常可以從以下三步入手 1 針對問題,定 空間 2 確定易於搜尋的解空間結構 3 以深度優先的方式搜尋解空間,並在搜尋的過程中進行剪枝 回溯法通常在解空間樹上進行搜尋,而解空間樹通常有子集樹和排列樹。針對這兩個問題,演算法的框架基本如下...

python 非遞迴解決n皇后問題

python 非遞迴解決n皇后問題 複雜度可能高了點 也沒太注意 我想了好久 也找了好久 沒看到什麼能夠用python解決n皇后問題而且不呼叫遞迴的 因為我不太能理解遞迴 尤其是到n層時 智商受限 import copy defcheck a,x,y b flag true for i in ran...

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

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