一、 引言(简要说明设计题目的目的、意义、内容、主要任务等)
目的及意义:
迷宫问题是取自心理学的一个实验。通过运用 C 语言对迷宫的设计和求解,更好的掌握链
栈的定义、操作和应用;掌握结构体数组的定义、操作和应用;了解建立迷宫问题数学模型的
方法。同时让我们通过对迷宫的求解,更好的理解数据结构中的“穷举求解”算法,理论和实践相
结合,提高我们的兴趣的同时,增加我们对栈的应用理解和“穷举求解”算法的应用。
内容:
利用 C 语言编写一个随机的迷宫。首先进入菜单进行选择:
1. 随机生成迷宫;
2. 随机生成有通路的迷宫;
3. 随机生成有通路的迷宫并求解;
4. 手动求解迷宫;
0. 退出。
随机生成迷宫是利用随机函数 srand((unsigned) time(NULL))对创建的二维结构体数组中
的点进行随机分布。每个点利用随机数%3 产生出来的只有 0、1、2 三个数字,其中将 0 设置
为墙,1、2 设置为通路。再将整个二维矩阵利用双层 for 循环打印显示出来,就生成了随机迷
宫。
随机生成有通路的迷宫也是利用随机函数 srand((unsigned) time(NULL))产生 0 到 9 十
个随机数,通过产生的随机数来定义墙或者通路,生成一个二维随机迷宫,先对该生成迷宫进
行求解,如果求解成功则将此迷宫打印输出,如果求解不成功,则执行循环,直到求解出有通
路的迷宫为止。
手动求解迷宫则是利用手动输入坐标,来标记迷宫中的通路点,从而找到迷宫的通路。当
输入坐标点为通路时会提示你输入下一个相邻坐标点,当输入坐标点不为通路时或者与上一座
标点不相邻时,系统会视为非法坐标,让用户重新输入,直到找到迷宫出口时,会自动打印输
入用户输入的坐标点通路。如果用户无法找到迷宫通路,可以通过输入-1,-1 坐标来退出。
对于迷宫的求解,采用的是“穷举求解”方法,即从入口出发,顺着某个方向进行探索,若
能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条
通路。假如所有可能的通路都探索到而未能到达出口,则所设的迷宫没有通路。“穷举求解”方法
利用 do{}while()循环来对迷宫进行向下遍历搜索,将可通过的合法路径压入栈中,沿着此合
法路径的一个方向进行搜索,当进入死胡同时,则执行退栈操作,继续沿该合法点的剩余方向
进行探索,如若该点所有方向均搜索完毕,则再次执行退栈操作,继续沿剩余新退出栈的点的
剩余方向进行向下搜索,如此循环下去,直到栈为空,则退出 do{}while()循环,完成迷宫的
求解。
主要任务:
<1>用 C 语言编写程序可以随机生成二维迷宫;
<2>用 C 语言编写程序可以随机生成二维有通路的迷宫;
<3>用“穷举求解”方法求解随机生成二维有通路的迷宫;
评论1