求解:栈的应用 深度优先搜索:迷宫问题

时间:2022-04-06 09:20:51

假设迷宫是一个n行n列的二维平面表格,左上角作为迷宫的入口,右下角作为迷宫的出口。

例如:可以用一个10×10的矩阵maze[10][10]来表示四周为墙的8×8迷宫,矩阵的元素为0或1,0表示通路,1表示墙(即无法穿越)。左上角maze[1][1]=0作为迷宫的入口,右下角maze[8][8]=0作为迷宫的出口。

迷宫中有一只猫在随机游走,一只老鼠要从迷宫的入口逃到出口。如果老鼠遇到猫就会被吃掉。假定老鼠和猫的速度是相同的,而且猫不会主动问题求解的目标是为老鼠寻找一条从入口到出口的通路,并且不被猫吃掉。

求解:栈的应用 深度优先搜索:迷宫问题

本实验要求设计一个程序,能自动或手动生成这样一个nn列的矩阵maze[n][n],即每个元素都为0或1的二维数组,然后判断该矩阵表示的迷宫是否存在一条使得老鼠不会被猫吃的从入口到出口的通路。如果存在,将表示该通路的数组下标按顺序保存到文件path.txt,如:(1,1)(1,2)(1,3)(2,3)(3,3)(4,3)(4,4)(4,5)

(4,6)(5,6)(5,7)(6,7)(6,8)(7,8)(8,8);如果不存在,则显示相关信息。

 

迷宫问题可以用深度优先搜索方法实现。在迷宫内部的每一格都有四个方向可以走(走通或走不通)。应用栈保存当前格的坐标(即数组下标),然后任意选取一个能走通的方向进行移动;移动后,到新一格,保存新格坐标,然后继续移动。如果某格的三个方向都走不通,则返回上一格,选取另一个能走通的方向进行移动。

 

因为猫不会主动扑捉老鼠,故将猫看成是“移动的墙”即可。

 

自动生成迷宫时,先用srand((unsigned)time(0))产生随机种子,然后再利用rand()%2来随机生成0或1,输出迷宫信息文件maze.txt;

【注】使用time()函数需要 #include<ctime>

 

手动生成迷宫时,应当用读取文件的方式,例如创建包含迷宫信息的文件maze.txt。

 

本实验训练的内容包括六个方面:

1.  面向对象程序设计方法,类模板的应用;

2.  二维数组的应用;

3.  深度优先搜索方法,栈的应用,回溯算法;

4.  产生随机整数的方法;

5.  文件的读写操作;

6.  程序测试计划、用例的设计和测试方法。

 

按时提交程序源代码、测试用例文件(即迷宫信息文件maze.txt)、迷宫通路文件path.txt、设计性实验报告等。