概括:实现迷宫的算法主要在于查找和回溯。从入口开始之后我们所查找的每一个位置都要去判断它的另外三个方向(不包括刚刚走过的路径)的路径能不能通,如果能通则到下个位置,并将上个位置进行标注。在将此位置作为当前位置继续走。如果一个位置的另外三个方向都不能通过,则需要回溯,一直回溯到可以通过的位置。我们需要将走过的路径进行标注,以便回溯的时候更加快捷。
首先我们从起始位置开始一直沿橙色路线走下去,将走过的路径标记为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,正是因为栈的这个特点,我们在走迷宫时可以将能走通的路径压入栈中,在进入死胡同的时候可以进行回溯只需要出栈就可以。
博主第一次写,写得不好的地方希望大家多多包涵
时间: 2024-10-09 11:42:01