归纳:实现迷宫的算法主要在于查找和回溯。从入口开始以后咱们所查找的每个位置都要去判断它的另外三个方向(不包括刚刚走过的路径)的路径能不能通,若是能通则到下个位置,并将上个位置进行标注。在将此位置做为当前位置继续走。若是一个位置的另外三个方向都不能经过,则须要回溯,一直回溯到能够经过的位置。咱们须要将走过的路径进行标注,以便回溯的时候更加快捷。
算法
首先咱们从起始位置开始一直沿橙色路线走下去,将走过的路径标记为2,最后将会走入死胡同,而后沿着紫色的路径进行回溯知道有同路。ide
下面咱们来看一下实现代码blog
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,正是由于栈的这个特色,咱们在走迷宫时能够将能走通的路径压入栈中,在进入死胡同的时候能够进行回溯只须要出栈就能够。get