概括:實現(xiàn)迷宮的算法主要在于查找和回溯。從入口開始之后我們所查找的每一個位置都要去判斷它的另外三個方向(不包括剛剛走過的路徑)的路徑能不能通,如果能通則到下個位置,并將上個位置進行標注。在將此位置作為當前位置繼續(xù)走。如果一個位置的另外三個方向都不能通過,則需要回溯,一直回溯到可以通過的位置。我們需要將走過的路徑進行標注,以便回溯的時候更加快捷。
創(chuàng)新互聯(lián)是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注網(wǎng)站設(shè)計制作、成都做網(wǎng)站、網(wǎng)絡(luò)營銷、企業(yè)網(wǎng)站建設(shè),賣友情鏈接,廣告投放平臺為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計到用戶體驗提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
首先我們從起始位置開始一直沿橙色路線走下去,將走過的路徑標記為2,最后將會走入死胡同,然后沿著紫色的路徑進行回溯知道有同路。
下面我們來看一下實現(xiàn)代碼
bool MazePath(int* a,int n,const Pos& entry,stack& path) { Pos cur=entry; path.push(cur); while(!path.empty()) { a[cur._row*n+cur._col]=2; if(cur._row==n-1) { return true; } else { //上 Pos next=cur; next._row--; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } 右 next=cur; next._col++; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } //下 next=cur; next._row++; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } //左 next=cur; next._col--; if(CheckIsAccess(a,n,next)) { cur=next; path.push(cur); continue; } cur=path.top(); path.pop(); } }
此程序是通過壓棧,和出棧來實現(xiàn)。首先我們來簡單的了解一下棧,棧是只能從一個口進行pop與push,正是因為棧的這個特點,我們在走迷宮時可以將能走通的路徑壓入棧中,在進入死胡同的時候可以進行回溯只需要出棧就可以。
博主第一次寫,寫得不好的地方希望大家多多包涵