# 迷宫问题 数据结构(清华大学出版社)一书中的迷宫问题一直是不可避免的练习题,本文章带来的是非递归的动态迷宫问题的代码(简洁版),该代码简单易懂,适合初学者使用学习。
如需要升级版非递归迷宫,请点击此文章阅读:数据结构——升级版迷宫非递归求解问题
迷宫生成
该算法迷宫生成部分使用随机生成随机数来随机生成,首先随机生成0-10的随机数,设置数N=3,如果生成的随机数大于等于3,那么返回0(即为路),否则返回1(即为墙),然后四周全部设为1。
并且可以通过改变N 的大小来设置迷宫难度。
迷宫寻路
该迷宫寻路部分,首先设置方向数组,让小人随机向四个方向走,如果可以走,那么继续进行,如果前路不能走(墙或走过的路),那么退栈,并将此处标记为死路。
代码运行结果
部分代码展示
int main() {
int i, j;
int move[4][2] = { {0,1},{1,0},{0, -1},{-1,0} }; //定义移动数组
int o; cout << "是否随机生成迷宫(1为是,0为否):";
cin >> o;
do
{
if (o == 1) RMaze();
else if (o == 0)
{
cout<<"请自行输入迷宫:"<<endl;
for(int i=0;i<m+2;i++)
{
for(int j=0;j<p+2;j++)
cin>>Maze[i][j];
}
}
else cout << "输入错误,请重新输入!" << endl;
} while (o != 1 && o != 0);
for (int i = 0; i < m + 2; i++)
{
for (int j = 0; j < p + 2; j++)
{
Transformation(Maze[i][j]);
}
cout << endl;
}
for (i = 0; i < m + 2; i++)
for (j = 0; j < p + 2; j++) mark[i][j] = 0; //标记数组赋值:都赋值0,表示未走
TIMEDELAY();
system("cls");
mark[1][1] = 1; //把mark[1][1]赋值1,表示从[1][1]点出发
Path(m, p, move, Maze, mark);//调用SeekPath函数,寻找能走出迷宫的路径
system("pause");
return 0;
}
代码获取途径
如需完整代码请添加点击以下链接进行购买:https://download.csdn.net/download/m0_54688810/20224758