文章目录
1. 题目2. 解题思路3. 黑窗口运行效果和代码4. 可视化地图效果和代码5.最后
1. 题目
数据结构课程,讲完栈,老师留下严蔚敏PPT上的作业,迷宫求解,如下: ![请添加图片描述](https://img-blog.csdnimg.cn/68430e96160b4370a8dad9ad7d58db55.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YiY5bu65p2w,size_20,color_FFFFFF,t_70,g_se,x_16)
2. 解题思路
1)采用递归的深度优先搜索,从出发点搜索至结束点 2)递归中自带“栈特性”,在进入当前递归函数相当于栈的push,退出当前递归函数相当于栈的pop,那么根据这个特性,实现搜索地图中返回上一个结点的功能。 具体看代码,代码详细注释,花点时间仔细看看能懂得。如果不懂,网上搜搜深度优先搜索讲解视频。
3. 黑窗口运行效果和代码
![请添加图片描述](https://img-blog.csdnimg.cn/a13647fd92d547529cd6ee3db40899fc.gif)
#include
#include
#include
using namespace std;
// 地图值: 1是墙壁,0是通道,2是主角所在位置,3是出口 4是不能通过的标记
#define WALL 1
#define PASS 0
#define ZHUJUE 2
#define EXITS 3
#define NOPATH 4
// 全局变量
int m = 10, n = 10; // 行和列 默认为10
int map[100][100]; // 地图数组,先开大一点,根据m、n限定范围
int vis[100][100]; // 是否访问过,0是没访问,-1是访问过了
bool isFind = false; // 是否找到出口
stack pathStack;// 用STL模板的栈类记录路径
// 打印地图值
void PrintMap(int flag) {// 根据flag是否清除控制台内容
if (flag == 0) {
COORD position;
position.X = 0;
position.Y = 0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
cout |