棧的應用之迷宮

2021-06-18 07:09:14 字數 2293 閱讀 5457

棧是後進先出的,棧分為順序棧和鏈棧:

順序棧是由一組位址連續的儲存單元構成,依次存放從棧底到棧頂的資料元素;

鏈棧是一組位址可不連續的儲存單元構成,鏈棧的建立過程類似於採用前插法建立鍊錶;

注意程式中棧的操作,

push(),pop(),gettop()等等。

網上有一段利用棧完成的程式,可以拿來欣賞一下,首先感謝一下**的原作者。

#include using namespace std;

class stack;

void printpath(stack p);

bool mazepath(int **maze,int m,int n);

class t

;class linknode

;class stack

;stack::stack()

stack::~stack()

void stack::push(t e)//把元素e壓入棧中,類似鍊錶的前插法

t stack::pop()

t stack::getpop()//取出棧頂元素

void stack::clear()

bool stack::empty()

int move[4][2] = ,,,};

bool mazepath(int **maze,int m,int n);

//尋找迷宮maze中從(0,0)到(m,n)的路徑

//成功則返回true,否則返回false

void printpath(stack p);//輸出迷宮的路徑

void restore(int **maze, int m, int n);//恢復迷宮

int** getmaze(int &m,int &n);//獲取迷宮,返回訪問迷宮的二維指標

int main()

bool mazepath(int **maze,int m,int n)//尋找迷宮maze從(0,0)到(m,n)的路徑

for(loop = 0; loop < 4; loop++)

if((x == m)&&(y == n))//成功到達出口

}//如果沒有新位置入棧

if(p.getpop().x == q.getpop().x && p.getpop().y == q.getpop().y)

}return 0;//查詢失敗

}void printpath(stack p)//輸出路徑

while(!t.empty())

{

data = t.pop();

cout<<"("<

示例輸出:

測試1:

請輸入迷宮的長和寬:5 5

請輸入迷宮內容:

0 1 1 0 0

0 0 1 1 0

1 0 0 1 1

1 0 0 1 0

1 1 0 0 0

迷宮的路徑為

括號內的內容分別表示為(行座標,列座標,數位化方向,方向)

(1,1,1,↓)

(2,1,2,→)

(2,2,1,↓)

(3,2,1,↓)

(4,2,2,→)

(4,3,1,↓)

(5,3,2,→)

(5,4,2,→)

(5,5,0,)

迷宮路徑探索成功!

測試2:

請輸入迷宮的長和寬:9 8

請輸入迷宮內容:

0 0 1 0 0 0 1 0

0 0 1 0 0 0 1 0

0 0 0 0 1 1 0 1

0 1 1 1 0 0 1 0

0 0 0 1 0 0 0 0

0 1 0 0 0 1 0 1

0 1 1 1 1 0 0 1

1 1 0 0 0 1 0 1

1 1 0 0 0 0 0 0

迷宮的路徑為

括號內的內容分別表示為(行座標,列座標,數位化方向,方向)

(1,1,1,↓)

(2,1,1,↓)

(3,1,1,↓)

(4,1,1,↓)

(5,1,2,→)

(5,2,2,→)

(5,3,1,↓)

(6,3,2,→)

(6,4,2,→)

(6,5,3,↑)

(5,5,2,→)

(5,6,2,→)

(5,7,1,↓)

(6,7,1,↓)

(7,7,1,↓)

(8,7,1,↓)

(9,7,2,→)

(9,8,0,)

迷宮路徑探索成功!

棧的應用之迷宮

利用棧對迷宮求解,採用的基本方法是回溯法,其實也算是一種暴力破解吧.畢竟是將乙個乙個方塊檢驗直至終點或者棧空。入棧 當棧頂元素方塊周圍有可行方塊時,將該可行方塊入棧 出棧 當棧定元素的方塊周圍都沒有可行方塊時,出棧 有幾點需要注意 1.當棧頂元素彈出時,我們又要重新對棧頂元素周圍的方塊進行檢驗,為避...

棧的應用之求解迷宮問題(棧操作)

給定乙個m n的迷宮圖,求一條從指定入口和出口的迷宮路徑。假設迷宮圖如圖所示 m n 6的迷宮圖 為了表示迷宮,設定乙個陣列mg,其中每個元素表示乙個方塊的狀態,為0表示方塊是通道,為1表示方塊是障礙物 不可走 為了演算法方便,一般在迷宮的外圍加一條圍牆,例如上圖的迷宮表示為 由於迷宮四周加了一道圍...

棧的應用 迷宮

使用c 構建帶環迴路迷宮,並使用迭代法,遞迴法求出口 使用遞迴方法求迷宮的最短路徑 其實在列印最短路徑是使用佇列的話路徑就不是反著的了 pragma once includeusing namespace std include includetypedef struct pos pos class...