您好,登錄后才能下訂單哦!
概括:實(shí)現(xiàn)迷宮的算法主要在于查找和回溯。從入口開始之后我們所查找的每一個(gè)位置都要去判斷它的另外三個(gè)方向(不包括剛剛走過的路徑)的路徑能不能通,如果能通則到下個(gè)位置,并將上個(gè)位置進(jìn)行標(biāo)注。在將此位置作為當(dāng)前位置繼續(xù)走。如果一個(gè)位置的另外三個(gè)方向都不能通過,則需要回溯,一直回溯到可以通過的位置。我們需要將走過的路徑進(jìn)行標(biāo)注,以便回溯的時(shí)候更加快捷。
首先我們從起始位置開始一直沿橙色路線走下去,將走過的路徑標(biāo)記為2,最后將會(huì)走入死胡同,然后沿著紫色的路徑進(jìn)行回溯知道有同路。
下面我們來看一下實(shí)現(xiàn)代碼
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(); } }
此程序是通過壓棧,和出棧來實(shí)現(xiàn)。首先我們來簡單的了解一下棧,棧是只能從一個(gè)口進(jìn)行pop與push,正是因?yàn)闂5倪@個(gè)特點(diǎn),我們?cè)谧呙詫m時(shí)可以將能走通的路徑壓入棧中,在進(jìn)入死胡同的時(shí)候可以進(jìn)行回溯只需要出棧就可以。
博主第一次寫,寫得不好的地方希望大家多多包涵
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。