概括:實現迷宮的算法主要在于查找和回溯。從入口開始之后我們所查找的每一個位置都要去判斷它的另外三個方向(不包括剛剛走過的路徑)的路徑能不能通,如果能通則到下個位置,并將上個位置進行標注。在將此位置作為當前位置繼續走。如果一個位置的另外三個方向都不能通過,則需要回溯,一直回溯到可以通過的位置。我們需要將走過的路徑進行標注,以便回溯的時候更加快捷。
創新互聯是一家專業的成都網站建設公司,我們專注網站設計制作、成都做網站、網絡營銷、企業網站建設,賣友情鏈接,廣告投放平臺為企業客戶提供一站式建站解決方案,能帶給客戶新的互聯網理念。從網站結構的規劃UI設計到用戶體驗提高,創新互聯力求做到盡善盡美。
首先我們從起始位置開始一直沿橙色路線走下去,將走過的路徑標記為2,最后將會走入死胡同,然后沿著紫色的路徑進行回溯知道有同路。
下面我們來看一下實現代碼
bool MazePath(int* a,int n,const Pos& entry,stack<Pos>& 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(); } }
此程序是通過壓棧,和出棧來實現。首先我們來簡單的了解一下棧,棧是只能從一個口進行pop與push,正是因為棧的這個特點,我們在走迷宮時可以將能走通的路徑壓入棧中,在進入死胡同的時候可以進行回溯只需要出棧就可以。
博主第一次寫,寫得不好的地方希望大家多多包涵
當前文章:棧實現一個小迷宮
分享路徑:http://vcdvsql.cn/article42/jhicec.html
成都網站建設公司_創新互聯,為您提供域名注冊、網頁設計公司、關鍵詞優化、響應式網站、標簽優化、網站營銷
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯