数据结构(清华大学出版社)——迷宫(递归)


前言

本代码为清华大学出版社的数据结构实用教程(第二版)例4-7

迷宫问题一直是数据结构初学者避免不了练习题,博主在此提供迷宫的基本思路,以及完整代码(C++),欢迎大家借鉴使用。

基本思路

迷宫是一个矩形区域,有一个出口和入口,迷宫内部包含不能穿越的墙壁和障碍物。本程序用矩阵来描述迷宫。入口是(0, 0), 出口是(m,n),现在需要在迷宫中选找一条路径,穿过迷宫。位置Aij=1表示有障碍,0表示无障碍。

思路:

首先,利用数组定义四个方向(东南西北)进行搜索寻找可行方向,被走过的位置设置为1,也就是走过的地方就不再走(防止跳入循环),然后在可行的方向移动到下一个位置,将前一个位置坐标入栈(保存路径),且将此位置设置为1。

其次,如果在某个位置没有找到可行的方向,则将当前这个位置设置为1(也就是不再走这个位置),从栈顶弹出一个坐标,作为当前坐标(相当于这条路不通,要往回走),继续搜索其他的方向是否可行。

最后进行递归,直到找到路径即可。

代码整体思路为:

(1)输入迷宫

(2)寻找路径

(3)输出路径

以下是部分代码

int main()
{
	//生成随机迷宫矩阵
	//四周为1
	for (int i = 0; i < m + 2; i++)
	{
		maze[i][0] = 1;
		maze[i][n + 1] = 1;
	}
	for (int j = 0; j < n + 2; j++)
	{
		maze[0][j] = 1;
		maze[m + 1][j] = 1;
	}
	//内部随机生成0和1
	for (int i = 1; i < m + 1; i++)
	{
		for (int j = 1; j < n + 1; j++)
		{
			maze[i][j] = num();
		}
	}
	//设置入口和出口
	maze[1][1] = 0;
	maze[m][n] = 0;
	for (int i = 0; i < m + 2; i++)
	{
		for (int j = 0; j < n + 2; j++)
		{
			cout << maze[i][j] << " ";
		}
		cout << endl;
	}
	for (int i = 0; i < m + 2; i++)
		for (int j = 0; j < n + 2; j++)
			mark[i][j] = 0;
	//入口点对应访问标记为1
	mark[1][1] = 1;
	//调用函数递归求解
	if (SeekPath(1, 1))
		cout << "(" << 1 << "," << 1 << ")" << endl;
	else cout << "此迷宫无通路!" << endl;
	return 0;
}

程序运行结果

在这里插入图片描述

代码获取途径

如需完整代码,请点击以下链接进行购买:https://download.youkuaiyun.com/download/m0_54688810/19746939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学小白不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值