用棧實現迷宮s

2021-08-20 22:41:19 字數 1854 閱讀 4760

迷宮問題是經典的一類問題,如何從給出的入口找到對應的出口,實現的方法和馬踏棋盤問題相似也是通過找到周圍

8個方向座標的關係,然後依據深度優先搜尋方法和一定的條件找到下一步對應的出路。由於迷宮問題需要儲存具體的完成路徑,這與前面的問題存在一定的差別。採用能夠很好的解決這個問題,其中棧結構用來儲存具體的座標和方向。這樣根據棧就能保證以後每一次都能快速的找到出路。

主要步驟如下:

建立乙個堆疊空間,可以採用靜態陣列的方式,但由於不能準確的估計陣列空間大小,可以採用動態建立的方式。並將入口座標值壓入到棧中。定義乙個與迷宮大小相同的矩陣map,用來統計當前座標是否已經到達過,當沒有到達座標(i,j)時,則有map[nowi][nowj]=0表示通道map[nowi][nowj]=1表示牆map[nowi][nowj]=2表示現在的位置map[nowi][nowj]= 3表示走過的地方map[nowi][nowj]= 4表示已經確定走不通的地方.這樣主要是為了避免形成內部死迴圈,同時說明此路不能走通。

主要實現**如下:

#include

#include

#include"stack.c"

int m = 12 , n = 14 ;

int starti = 1 , startj = 1;

int endi=10,endj=12;

int map[12][14]=;

/*0 表示  通道

1 表示  牆

2 表示現在的位置

3表示走過的地方

4表示已經確定走不通的地方 

*///列印地圖 

void printmap()

}printf("\n");}}

//查詢可以走的路   返回  -1: 迷宮無解  0 :沒有通路1:右  2:下 3:左  4:上

int lookuppath (int nowi , int nowj)

void dowalk()

else if(next==-1)

else

map[nowi][nowj]=2;

data.i=nowi;data.j=nowj;

push(s,data);

}//列印地圖 

printmap();}}

int main(void)

其中引用用了乙個棧的基本建立的檔案

#include

#include

#define max 100

typedef structdata;

typedef struct stack; 

//建立乙個棧並初始化

stack * createstack()

//判棧空

int isempty ( stack * s )

//判棧滿

int isfull ( stack * s )

//入棧

int push ( stack * s , data data )

//出棧

data pop ( stack * s )

//取棧頂元素

data gettop ( stack * s) /*

int main(void)

while(!isempty(s))

return 0; 

}*/

用棧實現走迷宮

假設迷宮從出發點到終點最多只有一條通路。include 2016 4 14 15 11 define max 100 struct path using std cin using std cout using std endl void findnext path s,int i,int j,in...

2020 11 6 用棧實現迷宮求解

include include 包含system pause system cls 函式 include 包含srand rand函式 using namespace std define mazetype int 迷宮二維陣列的元素為int型 typedef struct posttype 位置資...

棧實現迷宮

棧的型別定義 棧是一種特殊的線性表,限定只能在表的一端進行插入和刪除操作的線性表。在表中,允許插入刪除的一端稱為 棧頂 不允許插入刪除的另一端稱為 棧底 沒有元素的棧稱為空棧,插入元素稱為入棧,刪除元素稱為出棧,稱為先進後出。順序棧型別的定義 順序棧的儲存方式是陣列,需要事先為他分配乙個可容納最多元...