栈和队列是数据结构中重要的部分,通过栈来实现走出迷宫。
1代表不能通行,0代表可以通行,将走的迷宫路线坐标不断地存入栈中,并赋成2,分别判断各个方向,如果是0则前进,1则判断下个方向。
迷宫的地图可以通过新建记事本,将地图输入。
代码实现:
struct Pos
{
int _row;//行
int _col;//列
};
bool CheckIsAccess(int* a,int n,Pos next)//判断是否超出迷宫范围,是否可以前进
{
if((next._row>=0)&&(next._row<n)&&\
(next._col>=0)&&(next._col<n)&&\
(a[next._row*n+next._col]==0))
return true;
else
return false;
}
bool MazePath(int* a,int n,Pos& entry,stack<Pos>& path)
{
Pos cur=entry;
path.push(cur);
while(!path.empty())
{
a[cur._row*n+cur._col]=2;//走过的地方赋成2
if(cur._row==n-1)//判断是否到达出口
{
return true;
}
//分别判断各个方向哪个可以前进
//上
Pos next=cur;
next._row--;
if(CheckIsAccess(a,n,next))
{
cur=next;
path.push(cur);
continue;
}
//下
next=cur;//将位置恢复到cur,再进行其他方向的判断
next._row++;
if(CheckIsAccess(a,n,next))
{
cur=next;
path.push(cur);
continue;
}
//左
next=cur;//将位置恢复到cur,再进行其他方向的判断
next._col--;
if(CheckIsAccess(a,n,next))
{
cur=next;
path.push(cur);
continue;
}
//右
next=cur;//将位置恢复到cur,再进行其他方向的判断
next._col++;
if(CheckIsAccess(a,n,next))
{
cur=next;
path.push(cur);
continue;
}
cur=path.top();//到达死角,回溯
path.pop();
}
}
void PrintMaze(int* a,int n)//打印迷宫
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i*n+j]<<" ";
}
cout<<endl;
}
}
void GetMaze(int* a,int n)
{
FILE* fout=fopen("MazeMap.txt","r");
assert(fout);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;)
{
char ch=fgetc(fout);
if(ch=='0'||ch=='1')//只有是1或0的时候才将其存到二维数组中
{
a[i*n+j]=ch-'0';
++j;
}
else
{
continue;
}
}
}
fclose(fout);
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。