C 迷宮求解詳解 棧

2021-09-02 10:11:52 字數 1249 閱讀 9415

相信大家都應該聽過棧吧,一直想利用棧來實現乙個演算法,最近有點空,就利用棧的先進後出的特性來完成迷宮求的問題,下面將詳細介紹棧的實現和迷宮求解的過程,可以很好的學習棧的使用。

棧有兩種實現方法,一種是順序,即陣列形式,一種是線性,即鍊錶形式,個人還是比較喜歡鍊錶形式實現棧的基本功能。

首先弄乙個簡單的迷宮,如圖:

我們很容易看出這個迷宮解的路徑,那怎麼讓計算機幫我們求解出來呢。

首先我們要對迷宮資料化,很容易想到二維陣列來表示,0表示通路,1表示障礙,即表示為:

int map[4][4]=,,,

};我們的思路是,從入口出發,順著探索方向向前探索,如能走通,則繼續往前走;否則,沿原路退回,換乙個方向進行探索,直至試探出口為止。看到這個思路,發現使用棧是多麼的合適。下面我們就來實現迷宮解答。

一.棧的實現

我們首先要會實現棧的出棧入棧等基本棧的構建

定義棧的結構:

struct node

};定義棧的頭指標:node *head=null;

資料入棧函式:

//進棧---插入到head之後

void push(node * &head,int x,int y,int direction,int above)

}資料出棧實現:

//出棧--取head後

void pop(node * &head)

}上面就實現了棧的基本功能。下面我們就可以開始對迷宮進行求解了。求實,理解了原理,**編寫就不是難事了。

迷宮求解步驟如下:

首先把入口進棧:push(head,0,0,1,0);//入口進棧

具體探索**:

//探索路徑

while(true)

else

break;

case 4:

if((temp.x-1)>=0&&map[temp.x-1][temp.y]==0&&temp.above!=2)

else

break;

default://即當temp.direction==5,此方塊已經把所有方向都探索完了,把他出棧

pop(head);

sea=false;

break;}}

}通過上面兩個while迴圈即可實現了迷宮求解。

主要要注意避免探索過程中出現左右或上下來回探索,實現了死迴圈

C 棧實現迷宮求解

給出乙個迷宮,求解從路口到出口的全部路徑是乙個經典問題,c 實現 如下 algrithm practice.cpp 定義控制台應用程式的入口點。include stdafx.h using namespace std define d 10 迷宮的維度 include includeint maze...

迷宮求解(棧)

這篇部落格是借鑑了always 的部落格修改得到了,感謝他的幫助。採用了以棧為基礎,在棧的基礎上進行迷宮的求解,用stack和maze兩個檔案來實現功能。stack.h的實現如下 pragma once include include include include typedef int dire...

棧 求解迷宮

檔名稱 main.cpp 完成日期 2016 年 7 月 1 日 版本號 v1.0 問題描述 編寫乙個求解迷宮問題 include include define maxsize 100 define n 4 列號 define m 4 行號 int mg m 2 n 2 struct stack m...