迷宫问题的分析与实现

迷宫算法实现与分析 迷宫问题是数据结构中的一个经典问题,还记得大学刚上完数据结构的时候,看到迷宫问题我都是直接跳过,觉得太难了 看得头痛。现在重温数据结构时,想把数据结构都熟悉一下,然后就做起了习题,通过练习编码来加强自己对数据结构的理解和把握。其实迷宫问题也没有我以前想的那么难,现在觉得以前的自己也太渣了,当然现在也渣,但现在我有了面对困难和解决困难的勇气,不得不说这也是自己的一种进步。废话不多说,下面简述一下迷宫 阅读详情

【问题描述】

以一个 m*n的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论  


其中二维矩阵中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 相关博文

c++实现源码


/*迷宫问题*/
#include<iostream>
#include<stack>
using namespace std;

char maze[10][10] =
{
	{ '0','1','1','1','1','1','1','1','1','1' },
	{ '0','1','0','1','1','1','1','1','1','1' },
	{ '0','0','0','1','1','1','1','0','0','0' },
	{ '1','0','0','0','0','1','1','0','1','0' },
	{ '1','0','1','1','0','1','1','0','1','0' },
	{ '1','0','1','1','0','1','1','0','1','0' },
	{ '1','1','0','0','0','1','1','0','1','0' },
	{ '1','1','0','1','1','1','1','0','1','0' },
	{ '1','1','0','0','0','0','0','0','1','0' },
	{ '1','1','1','1','1','1','1','1','1','0' },
};
/*打印源数据*/
void Show()
{
	for (int i = 0; i < sizeof(maze) / sizeof(maze[0]); i++)
	{
		for (int j = 0; j < sizeof(maze[0]) / sizeof(maze[0][0]); j++)
		{
			cout << maze[i][j] << " ";
		}
		cout << endl;
	}
}
/*递归查找*/
void RecFind(int i, int j)
{
	if (maze[i][j] == '1')   return;
	if (maze[i][j] == '@')   return;
	if (maze[i][j] = '@' && j == 9 && i == 9)
	{
		cout << "找到路径" << endl;
		Show();
		exit(0);
	}
	maze[i][j] = '@';
	RecFind(i, j + 1);
	RecFind(i + 1, j);
	RecFind(i, j - 1);
	RecFind(i - 1, j);
}
/*非递归实现*/
void NoRecFind()
{
	int i = 0;
	int j = 0;
	stack<char> s;
	s.push(maze[i][j]);
	maze[i][j] = '@';
	cout << "进入方法!" << endl;
	while (true)
	{
		if (maze[i][j + 1] == '0')
		{
			s.push(maze[i][++j]);
			maze[i][j] = '@';
		}
		else if (maze[i + 1][j] == '0')
		{
			s.push(maze[++i][j]);
			maze[i][j] = '@';
		}
		else if (maze[i][j - 1] == '0')
		{
			s.push(maze[i][--j]);
			maze[i][j] = '@';
		}
		else if (maze[i - 1][j] == '0')
		{
			s.push(maze[--i][j]);
			maze[i][j] = '@';
		}
		if (maze[i][j + 1] != '0' && maze[i + 1][j] != '0' &&
			maze[i][j - 1] != '0' && maze[i - 1][j] != '0')
		{
			if (i >= 9 && j >= 9)
			{
				break;
			}
			else
			{
				maze[i][j] = '*';
				s.pop();
			}
			char tmp = s.top();
			s.push(tmp);
		}
	}
	Show();
}

int main()
{
	Show();
	RecFind(0, 0);
	NoRecFind();
	return  0;
}





迷宫问题实验报告 迷宫问题。 立即下载

相关推荐

迷宫问题(栈解决)

使用栈解决迷宫问题,调用了stack类模板,算法

迷宫问题的研究与实现

【问题描述】 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 (1)    根据二维数组,输出迷宫的图形。 (2)    探索迷宫的四个方向:RIGHT为向右,DOWN向下,LEFT向左,UP向上,输出从入口到出口的行走路径。 【算法分析】 主要考查数据结构-栈。栈作为一种数据结构,是

夜深人静后的码农 2424

c代码,迷宫问题和思路分析

  c++代码的迷宫问题和思路分析,便于初学者学习。

百度面试题——迷宫问题(超详细解析)

迷宫问题的本质是图的遍历问题,从起点开始不断四个方向探索,直到走到出口,走的过程借助栈记录走过的路径,栈记录坐标有两个作用,一方面是记录走过的路径,一方面方便走到死路时进行回溯其他的道路。它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。此时的顺序为 (0,0),(1,0),(1,1),(1,2),(2,2)3.在下标为(1,0)时上面为1不能走,下面为0可以走。6.注意此时的下标(1,0) 只能走左,右两个方向,

qq_62939852的博客 9135

迷宫求解问题(经典程序设计的问题)

数据结构那本书上的迷宫问题 Stack::~Stack() //析构函数 { } void Stack::Push(T e) //把元素x压入栈中 { LinkNode *P; P=new LinkNode; P->data=e; P->next=top; top=P; }

汇编语言程序设计迷宫需求分析

汇编课设迷宫项目的需求分析,帮助一些同学进行对项目的了解

数据结构课设:迷宫问题(队列求解)

Step3:对队头进行东、南、西、北四个方向进行扩展,再对待扩展的结点进行判断,如果待扩展的结点不为墙,并且在当前路径中没有出现过,即为满足条件的点,可加入队列,并记录结点属性,如此即可通过队列求得所有满足条件的路径。Step2:取出队头元素,并将其从队列中删除,判断其是否为终点,如果是,则保存路径,根据pre逆向获取路径,并保存至stk数组中,以便使用。给定一个n*m的迷宫,0表示迷宫中的通路,1表示迷宫中的墙壁,给定起点和终点,求解从起点到终点的所有通路,或者没有找到通路的结论。2、可视化显示迷宫。

qq_63855497的博客 3348

可信数据空间:可信空间、区域功能节点、业务功能节点、连接器的关联关系

可信数据空间通过分层架构实现安全数据共享:可信空间作为顶层制定全局规则;区域功能节点协调辖区内功能节点协作;功能节点提供具体数据服务;连接器作为唯一通信通道确保安全交互。系统采用"规则自上而下约束,数据自下而上流动"机制,通过分层治理和标准化连接,在保证数据主权的同时实现跨域协作,具有策略分级执行、去中心化治理等特性,支持灵活扩展业务场景。

友莘居士的博客 1687

《数据结构与算法分析》课程设计——迷宫问题

中国矿业大学信控学院 补一下我之前在博客园发布的内容 懒得调了,想复制完整代码直接复制最下面的,想复制分布代码去看我博客园链接吧 《数据结构与算法分析》课程设计——迷宫问题 - 刷子zz - 博客园 一、问题描述 问题中迷宫可用方阵[m,n]表示,0表示能通过,1表示不能通过。若要从从左上角[1,1]进入迷宫,设计算法,寻求一条从右下角 [m,n] 出去的路径。我们用递增的数来代表寻找出口方向与步数,用-2来代表寻找过程中找错的路径。 二、需求分析 需要先创建一个...

是抹茶味的啊的博客 2万+

别再为OpenBCI_GUI安装发愁了!保姆级教程带你从Processing配置到成功运行(附常见错误解决)

本文提供了一份详细的OpenBCI_GUI安装教程,涵盖从Processing配置到成功运行的全过程,特别针对常见错误提供了解决方案。通过环境搭建、软件依赖安装、源码处理及首次运行实战,帮助用户高效完成数据可视化工具的部署与使用。

weixin_28366475的博客 270

Deeplabcut实战:从数据标注到行为分析的全流程解析

本文详细解析了Deeplabcut从数据标注到行为分析的全流程实战技巧,包括项目创建、配置文件定制、智能帧提取、高效标注方法、模型训练优化以及多视角融合等高级应用。通过具体案例和实用参数配置,帮助研究者快速掌握这一行为分析工具,提升实验效率和准确性。

weixin_29057163的博客 247

迷宫回溯问题分析及实现

迷宫回溯问题分析 先创建二维数组map[ ][ ],模拟迷宫。 约定:使用“0”表示没有走过,“1”表示墙,“2”表示通路可以走,“3”表示已经走过但是走不通。 i,j表示从哪个位置开始出发(1,1) 制定行走的策略,先走 下->右->上->左,如果走不通再回溯 代码实现 package com.recursion; public class MiGong { publi...

lu_long的博客 535

ParallelsDesktop 安装 CentOS-6.9-x86_64-minimal 教程

安装参考 tools没做 想安装的可以参考这个 mac 本机环境: 系统:macOS Catalina version 10.15.6 虚拟机软件:parallels Desktop 15 for Mac( Parallels Desktop-15.1.4(47270)) Centos镜像: CentOS-6.9-x86_64-minimal.iso https://mirrors.aliyun.com/centos-vault/6.8/isos/x86_64/ http://vault.centos.

爱吃鱼的小明的博客 955

迷宫回溯问题分析和实现

原文链接:传送门 迷宫问题 说明: 小球得到的路径,和程序员 设置的找路策略有关即:找 路的上下左右的顺序相关 再得到小球路径时,可以先 使用(下右上左),再改成(上 右下左),看看路径是不是有变化 测试回溯现象 思考: 如何求出最短路径? //下面代码的找路策略是:下右上左 public static boolean setWay(int[][] map, int i, int j) { if (map[6][5] == 2) { // 表示路已经找到了 return true;

秋叶夏风的博客 562

超酷炫,Python实现交通数据可视化!

此时输出的栅格化参数params的内容存储了栅格坐标系的原点坐标(slon、slat)、单个栅格的经纬度长宽 (deltalon、deltalat)、栅格的旋转角度(theta)、栅格的形状(method参数,其值可以是方形rect、三角形tri和六边形hexa)以及栅格的大小(gridsize参数,单位为米)。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。今天分享一次Python交通数据分析与可视化的实战!

m0_59236127的博客 1697

骑砍2霸主MOD开发(9)-游戏大地图(MapScene)

Settlement类型由town,castle,castle_village,village,hideout五种类型组成,通过对GameEntity中添加tag实现类型的加载.大地图中军团(MobileParty)的移动速度,AI寻路,食物消耗等均和当前MobileParty所处地形有关,地形统一被定义为TerrainType,类型有森林,荒漠等.MapScene.Read("Main_map", ref sceneInitializationData, "") 装载Main_map大地图。

骑砍战团&霸主MOD开发 1624

递归-迷宫回溯问题的分析与实现

步骤: 1.先创建一个二维数组模拟迷宫,红色的部分为模拟的墙,使用1表示墙,先把上下左右全置为1 可以先遍历输出看一下结果,再把红色的墙部分填1,1就是不能走的地方 使用递归回溯给小球找路,如果找到了就返回true,否则返回false public static boolean setWay(int[][]map,int i,int j){}//我们需要传入地图,i,j表示从哪个位置开始出发 设置开始点为[1][1],结束点为[6][5],则说明通路找到 约定:当地图的[i][j]为0时,表示当前还没有走

想握住此生辽阔 280

【AI智能体】Codex 开发聚合搜索应用项目实战操作详解

Codex 开发聚合搜索应用项目实战操作详解

congge 3096

迷宫回溯问题分析与实现

迷宫回溯问题分析与实现 迷宫实现 github 小球得到的路径,和程序员设置的找路策略有关,即找路的上下左右的顺序有关。 再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变 测试回溯现象 github 使用递归求最短路径 ...

孔祥月的博客 457

Ubuntu零基础教学-如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

带你如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

**My Coding Family** 5340

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

递归之迷宫回溯问题(分析与实现)

迷宫问题: 如图,迷宫大小为8行7列。红色区为墙,蓝色小球只能在白色区域走动 。 具体说明: 1、map 表示迷宫; 2、i、j 表示从迷宫的哪个位置开始出发(假设从1,1出发); 3、如果小球能到 map[6] [5] 的位置,说明小球已找到通路。 4、设置: 当 map[i] [j] =0 :表示该点没有走过; 当 map[i] [j] =1 :表示墙和挡板; 当 map[i] [j] =2...

m0_45097186的博客 334

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

015.迷宫回溯问题分析和实现

<!-- TOC --> <ul> <li><a href="#1-%E8%BF%B7%E5%AE%AB%E9%97%AE%E9%A2%98%E8%AF%B4%E6%98%8E">1. 迷宫问题说明

leon9dragon的博客 214

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

回溯算法复习(1)--老鼠走迷宫问题分析与实现

最近在leetcode上做到一个运用递归解决的题目。忽然记起大一自学数据结构那段为八皇后、汉诺塔、老鼠走迷宫问题着迷的岁月,好久没有接触这类问题了。在此拿出三年前大一暑假在家乡那个小书桌前花了六个小时才实现的老鼠走迷宫案例来进行一个简单的分析铺垫,顺便附上完整代码(附件),而后在后续的博客中针对leetcode上遇到的题目进行进一步的论述。

破晓的成长之路 2521

迷宫问题(递归调用)分析与实现(回溯算法Java)

递归是一种算法结构 回溯是一种算法思想 递归调用规则 当程序执行到一个方法时,就会开辟一个独立的空间(栈) 每个空间的数据(局部变量)是独立的。 递归需要遵守的重要规则 执行一个方法时,就创建一-个新的受保护的独立空间(栈空间)。 方 法的局部变量是独立的,不会相互影响。 如果 方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据。 归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError。 当一个方法执行完毕,或者遇到return, 就会返回,遵守..

319

(6.2 迷宫回溯问题分析与实现)

package com.tian.recursion; /** * @author Tian Email:1700468932@qq.com * @create 2022-03-11 21:37 */ public class MiGong { public static void main(String[] args) { //先创建一个二维数组,模拟迷宫 //地图 int[][] map = new int[8][7]; ...

m0_56379670的博客 136

算法-迷宫回溯问题

迷宫回溯问题分析和实现(1) 迷宫回溯问题分析和实现(2)

Eistert 84
上一篇: c++实现工厂方法模式对八大排序的统一管理
下一篇: 链家笔试题
lfSeanDragon
博客等级 码龄9年 17粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值