相信大家都應該聽過棧吧,一直想利用棧來實現乙個演算法,最近有點空,就利用棧的先進後出的特性來完成迷宮求的問題,下面將詳細介紹棧的實現和迷宮求解的過程,可以很好的學習棧的使用。
棧有兩種實現方法,一種是順序,即陣列形式,一種是線性,即鍊錶形式,個人還是比較喜歡鍊錶形式實現棧的基本功能。
首先弄乙個簡單的迷宮,如圖:
我們很容易看出這個迷宮解的路徑,那怎麼讓計算機幫我們求解出來呢。
首先我們要對迷宮資料化,很容易想到二維陣列來表示,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...