迷宮問題是經典的一類問題,如何從給出的入口找到對應的出口,實現的方法和馬踏棋盤問題相似也是通過找到周圍
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 位置資...
棧實現迷宮
棧的型別定義 棧是一種特殊的線性表,限定只能在表的一端進行插入和刪除操作的線性表。在表中,允許插入刪除的一端稱為 棧頂 不允許插入刪除的另一端稱為 棧底 沒有元素的棧稱為空棧,插入元素稱為入棧,刪除元素稱為出棧,稱為先進後出。順序棧型別的定義 順序棧的儲存方式是陣列,需要事先為他分配乙個可容納最多元...