走迷宫图解

本节利用栈的思想用试探法进行了迷宫一条路径的探索。其中主要的操作是找到下一个空格、如果空格不再可行退回上一个格、每走过一个格子将走过的格子标记为-1防止循环走。

原理如下图:

具体的代码如下:

#走一个任意的5*5迷宫
#mg可以为[[1,1,1,1,1,1],[1,0,1,0,0,1],[1,0,0,1,1,1],[1,0,1,0,0,1],[1,0,0,0,0,1],[1,1,1,1,1,1]]
#5*5的迷宫外面围了一层墙,所以展现为一个6*6的列表
class Box:def __init__(self,i1,j1,di1):#Box是进栈的结点,里面存放着该点的坐标、di表示现在站立的结点走时的方向#注意这里的横纵坐标与平时数学里面的坐标轴不一样self.i=i1#横坐标self.j=j1#纵坐标self.di=di1#方向def mgpath(xi,yi,xe,ye):#xi,yi起点,xe,ye终点global mg#mg是构建的迷宫,用5*5的列表表示st=SqStack()#建立一个链栈,用顺序栈也可以,不过要注意内存问题#dx dy负责辅助建立方向dx=[-1,0,1,0]dy=[0,1,0,-1]e=Box(xi,yi,-1)#e是起点,-1标记在结点中,本题有两个标记,一个在结点中,一个在原来形成的迷宫列表中st.push(e)#每一个走过的结点都进栈,负责记忆走过的路mg[xi][yi]=-1#这个负责在列表里面用-1记录这个结点已经走过了,防止来回走形成死循环while not st.empty():b=st.gettop()#用b标记现在站立的位置if b.i==xe and b.j==ye:#如果站立的位置已经是终点for k in range(len(st.data)):print("["+str(st.data[k].i)+','+str(st.data[k].j)+']',end='')#输出每个结点的横纵坐标值return True#如果是True,到这里就结束啦find =False#如果不是,标记find为Falsedi=b.di#用di标记现在站立的结点要走时的方向while di<3 and find ==False:#用while循环遍历所有方向,从而找到一个方向是空格di+=1#找不到就换一个方向i,j=b.i+dx[di].b.j+dy[di]#找定这个方向之后更新i,j值,这个i、j值是找到空格的坐标if mg[i][j]==0:#用这个判断来判断这个位置是否是空格find =True#找到find就标记为Trueif find:#如果找到了可行的落脚点,就要入栈并把两个标记值标记为-1(一个在栈的结点里,一个在迷宫列表里)b.di=di#最终确定现在站立的结点要走时的方向b1=Box(i,j,-1)#建立要到的结点st.push(b1)#把这个结点入栈mg[i][j]=-1#把标记值标记为-1else:#如果没有找到可行的落脚点,说明这个位置不能落脚,要重新站立的结点mg[b.i][b.j]=0#站立的结点重新标记为0,表示仍然在站立选方向st.pop()#最上面结点出栈,从新寻找新的方向return  False#要不返回没找到,不可行xi,yi=1,1
xe,ye=4,4
print("一条迷宫路径:",end='')
if not mgpath(xi,yi,xe,ye):print("不存在迷宫路径")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381782.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++编程:获取路径中的文件名

文件是否存在 bool fileExists(const char *fileName) {ifstream infile(fileName);return infile.good(); }C/C获取路径中的文件名 void getfilename(const char *filename, char *name)//从完整路径名中解析出文件名称&#xff0c;例如&#xff1a;/home/test/abc.txt,解析…

Linux C 文件路径中获取文件名及路径

编程中有时会遇到需要把文件路径中的文件名或者路径提取出来的情况&#xff0c;发现了两个好用的函数记录一下。 一、提取文件名 头文件&#xff1a;#include <libgen.h> **函数&#xff1a;**char *basename(char *path); 注&#xff1a;这个函数不会修改传入的 path …

从路径名中得到文件名 MFC

从路径名中得到文件名 MFC 转载▼ strFileNamestrPathName.Mid(strPathName.ReverseFind( \\ )1); //若去掉.txt .exe .doc等后缀&#xff0c;共4个字符 strFileNamestrPathName.Mid(strPathName.ReverseFind( \\ )1&#xff0c;strPathName.length()-4); CString CFile…

C++读取特定路径下文件目录及文件名称

C读取特定路径下文件目录及文件名称亲测有效。主要用到了以下几个头文件(类)&#xff1a;io.h&#xff0c;fstream&#xff0c;string&#xff0c;vector 1、读取某给定路径下所有文件夹与文件名称&#xff0c;并带完整路径。代码如下&#xff1a; 1 void getAllFiles(string…

C++读取文件夹中文件名以及文件路径

文章目录 1 获取文件夹中所有文件名&#xff0c;包含子文件夹中的文件名2 获取文件夹中所有文件路径&#xff0c;包含子文件夹中的文件路径3 获取母文件夹中所有文件名&#xff0c;不包含子文件夹中的文件名4 只获取母文件夹中的文件路径&#xff0c;不包含子文件夹中的文件5 主…

C++ 获取文件路径和文件名

C 获取文件路径和文件名 就是基本的字符串截取 const char * filePath“F:\a.txt”; string filePath_strfilePath; string fileNamefilePath_str.substr(filePath.find_last_of(’\\’)1); const char *filename_cfileName.c_str(); ** 1. string 转换 成 const char *…

如何设置打印机?

1.取消禁用Guest用户&#xff0c;因为别人要访问安装打印机的按个电脑就是以guest账户访问的。 点击【开始】按钮&#xff0c;在【计算机】上右键&#xff0c;选择【管理】&#xff0c;如下图所示&#xff1a; 在弹出的【计算机管理】窗口中找到【Guest】用户 双击【Guest】&am…

Epson 打印机设置

在新到的 680 的打印机打印新的电费收据&#xff0c; 驱动选择 Windows 自带的 1600k 驱动&#xff1b;后进连打&#xff0c;左边卡位在 4 处。 一、 问题现象 如果您&#xff08;比如使用了进纸旋钮调整页顶位置之后&#xff0c;或者在使用专用软件打印套打票据的时候&a…

Excel的公式和函数

目录 运算符 地址的引用 逻辑函数 文本函数 统计函数 查找与引用函数 日期函数 常见出错信息 一、运算符 算术运算符 若要进行基本的数学运算&#xff08;如加法、减法、乘法或除法&#xff09;、合并数字以及生成数值结果&#xff0c;请使用以下算术运算符。 比较运算符 可以使…

excel 数据计算

简单计算&#xff1a; 算销售额&#xff0c;B2*C2&#xff0c;右下双击填充下面的 计算 D2&#xff1a;D6 到 D7 函数计算 日期计算 DATEDIF(start,date,end_date,unit) 返回两个日期之间的年/月/日间隔数 unit&#xff1a;有 Y&#xff1a;指时间段中的整年数 M&#xff1…

计算机二级MS office之excel常用函数

总结一下计算机二级excel中常用的函数&#xff0c;如果有错误的地方&#xff0c;希望小伙伴们可以多多指教❤️。 本文主要介绍了以下函数(可根据序号进行查阅)&#xff1a; 序号函数名称函数类别1VLOOKUP查询函数2MID、 LEFT、RIGHT文本函数3LOOKUP数组查询函数4RANK排名函数…

[Excel函数] 计算统计类函数

Excel公式规范: (1) 在Excel中输入函数时&#xff0c;是不区分大小写的 (2) 在公式函数中&#xff0c;每个参数都是用逗号分隔的 (3) 参数中的文本要用双引号引起来&#xff0c;对于单纯的数字是不用双引号的 (4) 一定要在英文半角状态下输入标点符号&#xff0c;不能在中文状态…

Chrome浏览器导出插件并安装到其他电脑浏览器上的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Excel计算函数(计算机二级)

Excel计算函数 一、Sum()求和函数1.sum()2.sumif()3.sumifs() 二、Average()求平均值函数三、Max()求最大值函数四、Min()求最小值函数五、Count()求最个数函数1.count()2.counta()3.countif()4.countifs() 六、if()函数七、rank()排名函数 一、Sum()求和函数 1.sum() 双击底下…

【雕爷学编程】Arduino动手做(24)---水位传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

哪些思维方式是你刻意训练过的?

1.管理记忆 2.贴好标签 3.放大苦难 4.绝对理性 5.自以为是 6.调整尺度 7.等价交换 8.断舍离 脑子只要醒着就不停转 18岁左右开始刻意培养自己的各种思维方式 至今6年了 1. 管理自己的脑海 有效的记忆容量是有限的 所以需要管理 更需要合适的记忆结构去管理 很多人会…

电台飞哥美食日记:三顾冒菜,一辈子最难忘的冒菜!

电台飞哥美食日记&#xff1a;三顾冒菜&#xff0c;一辈子最难忘的冒菜&#xff01; 今天&#xff08;2014年9月5日&#xff09;中午&#xff0c;成都交通广播电台《飞哥欢乐派&#xff08;FM 91.4&#xff09;》、成都电视台《吃喝玩乐全接触》的超人气主持人、成都餐饮同业公…

无线充电小车的实物图

无线充电小车的实物图

Type-c快充加无线直播麦克风方案(无线麦克风边充电)LDR6023C专业快充芯片

USB Type-C接口快充加无线麦克风应用&#xff1a; 随着互联网时代的迅速崛起&#xff0c;如今直播的主播越来越多&#xff0c;传统的耳机式直播渐渐被淘汰&#xff0c;取而代之的是无线传输&#xff0c;今天这篇文章就来讲一下无线麦克风加Type-c快充中的快速充电是怎么实现的&…

无线充电模组开发的原理和优势

现在绝大部分的电子设备&#xff0c;如手机、手表、笔记本电脑等都是通过有线的方式进行充电&#xff0c;即一端连接电子设备的充电电池&#xff0c;另一端连接交流电源。这种方式有很多危险的地方&#xff0c;首先频繁的插拔充电插头容易造成接口的损坏&#xff0c;也可能会带…