python迷宫问题的所有路径_python——迷宫问题总结
关于迷宫问题,常见会问能不能到达某点,以及打印到达的最短路径。可以用回溯法+递归来解决
代码一:dfs + 回溯
将矩阵外围以及路障统一设置为-1
设置current_step和next_step两个值。如果面临的点大于next_step,或者从未走过,就可以对它递归
存储矩阵:直接在原迷宫上修改,每个点标记的是从起点过来经过的步数,遇到0或者是比当前大至少2的,就考察
# -*- coding:utf-8 -*-
def init():
global graph
graph.append([-1, -1, -1, -1, -1, -1, -1])
graph.append([-1, 0, 0, -1, 0, 0, -1])
graph.append([-1, 0, -1, 0, 0, 0, -1])
graph.append([-1, 0, -1, 0, -1, -1, -1])
graph.append([-1, 0, -1, 0, 0, 0, -1])
graph.append([-1, 0, 0, 0, -1, 0, -1])
graph.append([-1, 0, 0, 0, 0, 0, -1])
graph.append([-1, -1, -1, -1, -1, -1, -1])
#深度优先遍历
def deepFirstSearch( steps , x, y ):
global graph
current_step = steps + 1
print(x, y, current_step )
graph[x][y] = current_step
next_step = current_step + 1
'''
遍历周围4个点:
如果周围节点不是-1 说明 不是障碍 在此基础上:
里面是0 说明没遍历过 我们把它修改成当前所在位置步数加1
里面比当前的next_step大 说明不是最优方案 就修改它
里面比当前next_step说明当前不是最优方案,不修改
'''
if not(x-1== 1 and y==1) and graph[x-1][y] != -1 and ( graph[x-1][y]>next_step or graph[x-1][y] ==0 ) : #上
deepFirstSearch(current_step, x-1 , y )
if not(x == 1 and y-1==1) and graph[x][y-1] != -1 and ( graph[x][y-1]>next_step or graph[x][y-1] ==0 ) : #左
deepFirstSearch(current_step, x , y-1 )
if not(x == 1 and y+1==1) and graph[x][y+1] != -1 and ( graph[x][y+1]>next_step or graph[x][y+1]==0 ) : #右
deepFirstSearch(current_step, x , y+1 )
if not(x+1== 1 and y==1) and graph[x+1][y] != -1 and ( graph[x+1][y]>next_step or graph[x+1][y]==0 ) : #下
deepFirstSearch(current_step, x+1 , y )
if __name__ == "__main__":
graph = []
init()
deepFirstSearch(-1,1,1)
print(graph[1][5])
代码二:也是回溯
这里0是可走,1是路障,用while来做循环。如果某点的附近有判断可走的新点,就将新点append进stack,走过了标记为-1;如果四个方向都没有,就从旧点从stack中pop掉,标上-1,进行回溯。
存储矩阵:stack中存储的0是可走,1是路障,-1是走过的或者是死路
maze = [
[1,1,1,1,1,1,1,1,1,1],
[1,0,0,1,0,0,0,1,0,1],
[1,0,0,1,0,0,0,1,0,1],
[1,0,0,0,0,1,1,0,0,1],
[1,0,1,1,1,0,0,0,0,1],
[1,0,0,0,1,0,0,0,0,1],
[1,0,1,0,0,0,1,0,0,1],
[1,0,1,1,1,0,1,1,0,1],
[1,1,0,0,0,0,0,1,0,1],
[1,1,1,1,1,1,1,1,1,1]
]
dirs = [lambda x, y: (x + 1, y),
lambda x, y: (x - 1, y),
lambda x, y: (x, y - 1),
lambda x, y: (x, y + 1)]
def mpath(x1, y1, x2, y2):
stack = []
stack.append((x1, y1))
while len(stack) > 0:
curNode = stack[-1]
if curNode[0] == x2 and curNode[1] == y2:
#到达终点
for p in stack:
print(p)
return True
for dir in dirs:
nextNode = dir(curNode[0], curNode[1])
if maze[nextNode[0]][nextNode[1]] == 0:
#找到了下一个
stack.append(nextNode)
maze[nextNode[0]][nextNode[1]] = -1 # 标记为已经走过,防止死循环
break
else:#四个方向都没找到
maze[curNode[0]][curNode[1]] = -1 # 死路一条,下次别走了
stack.pop() #回溯
print("没有路")
return False
mpath(1,1,8,8)
python迷宫问题的所有路径_python——迷宫问题总结相关推荐
- python获取当前路径和上一层路径_python获取当前路径和上一级路径
围观人数: 3 标签:getc 当前目录 路径 print bsp 获取 目录 dir dirname """获取当前目录"&q ...
- python 获取向上两级路径_Python学习第171课--相对路径和绝对路径
[每天几分钟,从零入门python编程的世界!] 这节我们补充2个概念:相对路径和绝对路径. ●绝对路径 就像一棵大树一样,从它的根开始,往上会有大的枝干,在大的枝干上面又会有小一点的树枝,小树枝上面 ...
- python f.write 保存图片到路径_Python实现生成图片路径和对应标签的方式
学计算机的同学都知道图片的路径更改特别麻烦,尤其要对应到相应的标签,这个让人炸花了眼,接下来就会通过python语言直接生成图片对应标签,大家也知道现在的python特别的火爆,原因就是它能够处理很多 ...
- python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南
CST微波工作室支持使用Matlab对其进行调用,但是一直以来官方没有提供python调用接口,但在最新的CST2020更新中添加了对Python3.6的调用支持,在安装路径下就已经附带了python ...
- 启动python项目找不到路径_Python os.startfile找不到FI
我对Python编程有问题.在我的程序中,我使用os.startfile()来启动程序,但它不允许我这样做. 当我的程序执行启动文件的命令时,我在Windows脚本主机中收到以下错误:Script: ...
- python rarfile不支持中文路径_python使用zipfile解压文件中文乱码问题
中文在编程中真实后娘养的,各种坑爹,python3下中文乱码这个问题抓破了头皮,头疼.看了alex的文章,才有种恍然大悟的感觉(链接在底部). 一句话,就是转换成unicode,压缩前是什么编码,使用 ...
- python如何获取文件的路径_python文件路径如何获取文件名?
上次有小伙伴就来咨询小编这个问题,但是思索好久,不知道怎么跟大家详细阐述,因为很多小伙伴都是正在学习基础内容,还有些小伙伴都已经快达到进阶了,后来,想了很久,终于给大家解答了这个问题,下面内容不仅适合 ...
- python下载找不到路径_python安装后的目录在哪里
从官网下载python的安装包,安装过程中可选择装在C盘或D盘或者其他的磁盘. 如果忘记了安装在哪里,可以在命令行中使用以下命令where python 会显示python的绝对路径C:\Users\ ...
- python根据文件名获取文件路径_python 查看文件名和文件路径
以下是把sourceDir目录下的以.JPG结尾的文件所有拷贝到targetDir目录下: >>>import os >>> import os.path > ...
最新文章
- [转]使用设计模式改善程序结构(二)
- Job make U funck Uself!!!
- arrays.sort(._Arrays.sort与Arrays.parallelSort
- 湛江高考2021成绩查询,2021广东省高中学业水平考试成绩查询(入口+方式)
- 单列表_使用Excel中的quot;记录单quot;功能快速录入数据
- php实现ftp上传,PHP_PHP实现ftp上传文件示例,FTP上传是PHP实现的一个常见且 - phpStudy...
- jQuery中 index() 方法的使用
- Progressive Web App:模仿原生应用的Web应用
- 每日一句20200104
- 375.猜数字大小II
- Jenkinsfile脚本实现master、slave节点(agent)共享内容
- html 文字 向上滚动代码,文字向上滚动代码
- layui table切换html,解决Layui中切换tab时table样式错乱问题
- 有一个函数y=x(x「1),y=2x-1(1「=x「10),y.=3x-11(x」=10)。写一段程序,输入x,输出y值
- UG 信息窗口弹不出来 测量 长度 角度 信息 窗口 弹不出来
- 【游戏客户端开发】Unity3D 学习笔记2——了解U3D引擎的操作面板和各种工具
- 关于新iPad充电的一些误读
- 2022年1~6中国市场汽车销量可视化
- android截视频软件,裁剪切视频app
- Python(1)概述与基础
热门文章
- HDU ACM 1162 Eddy's picture
- 学习C++之父的最新姐妹作笔记2
- 基于vmware服务器虚拟化管理,基于Vmware的服务器虚拟化管理论文.doc
- php sql 字段名称,PHPSQL Server – 字段名称被截断
- unity 弹出式菜单_Java Swing JMenu和JPopupMenu:菜单和弹出式菜单
- c++吃豆人代码_山药豆的功效与作用营养功效
- 用矩阵内积的办法构造迭代次数受控的神经网络1:0.6:0.1=4:3:2
- 【Matlab】绘制不同颜色线条
- 1.9 程序示例--局部加权线性回归-机器学习笔记-斯坦福吴恩达教授
- verilog一些小知识点注意事项集合