python迷宫问题代码_Python解决走迷宫问题算法示例
本文实例讲述了Python解决走迷宫问题算法。分享给大家供大家参考,具体如下:
问题:
输入n * m 的二维数组 表示一个迷宫
数字0表示障碍 1表示能通行
移动到相邻单元格用1步
思路:
深度优先遍历,到达每一个点,记录从起点到达每一个点的最短步数
初始化案例:
1 1 0 1 1
1 0 1 1 1
1 0 1 0 0
1 0 1 1 1
1 1 1 0 1
1 1 1 1 1
1 把图周围加上一圈-1 , 在深度优先遍历的时候防止出界
2 把所有障碍改成-1,把能走的地方改成0
3 每次遍历经历某个点的时候,如果当前节点值是0 把花费的步数存到节点里
如果当前节点值是-1 代表是障碍 不遍历它
如果走到当前节点花费的步数比里面存的小,就修改它
修改后的图:
-1 -1 -1 -1 -1 -1 -1
-1 0 0 -1 0 0 -1
-1 0 -1 0 0 0 -1
-1 0 -1 0 -1 -1 -1
-1 0 -1 0 0 0 -1
-1 0 0 0 -1 0 -1
-1 0 0 0 0 0 -1
-1 -1 -1 -1 -1 -1 -1
外周的-1 是遍历的时候防止出界的
默认从左上角的点是入口 右上角的点是出口
Python代码:
# -*- 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])
运行结果:
(1, 1, 0)
(1, 2, 1)
(2, 1, 1)
(3, 1, 2)
(4, 1, 3)
(5, 1, 4)
(5, 2, 5)
(5, 3, 6)
(4, 3, 7)
(3, 3, 8)
(2, 3, 9)
(2, 4, 10)
(1, 4, 11)
(1, 5, 12)
(2, 5, 13)
(2, 5, 11)
(4, 4, 8)
(4, 5, 9)
(5, 5, 10)
(6, 5, 11)
(6, 4, 12)
(6, 3, 13)
(6, 2, 14)
(6, 1, 15)
(6, 3, 7)
(6, 2, 8)
(6, 1, 9)
(6, 4, 8)
(6, 5, 9)
(6, 2, 6)
(6, 1, 7)
(6, 1, 5)
12
PS:本站还有一个无限迷宫游戏,基于JS实现,提供给大家参考一下:
在线迷宫小游戏:http://tools.jb51.net/games/migong
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
python迷宫问题代码_Python解决走迷宫问题算法示例相关推荐
- python迷宫问题算法_Python解决走迷宫问题算法示例
本文实例讲述了Python解决走迷宫问题算法.分享给大家供大家参考,具体如下: 问题: 输入n * m 的二维数组 表示一个迷宫 数字0表示障碍 1表示能通行 移动到相邻单元格用1步 思路: 深度优先 ...
- python迷宫地图代码_Python机器人探测迷宫代码求助
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Python3.4,Windows系统 这个project的目的是让机器人可以走任意迷宫,在机器人走迷宫之前并不知道迷宫长什么样子,要在走过迷宫之后获取迷 ...
- python中最小公倍数函数_Python实现的求解最小公倍数算法示例
这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...
- python迷宫求解代码_Python中的迷宫求解
我孜孜不倦地试图用python制作一个迷宫解算器.我已经使用了我所有的资源,比如朋友.互联网和堆栈.我已经根据之前的堆栈问题修改了很多代码,但是即使完全复制代码(我不喜欢这样做),也无法得到答案.在 ...
- python存文件代码_Python文件读写保存操作的示例代码
记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项. 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之 ...
- java 迷宫代码_老鼠走迷宫代码 JAVA
展开全部 //老鼠走迷宫程序 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Maze1 ...
- 编程题走迷宫_洛谷P1238 走迷宫题解
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)
/*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...
- python求最大值代码_python 最大值
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 推荐使用腾讯云 api 配套的 7 种常见的编程语言 sdk,已经封装了签名和请 ...
- python新年有趣代码_Python有趣时刻,这些代码让你大呼卧槽,怎么会这样
分享一个实用问题,用python读取Excel并保存字典,如何做? 下面是该同学问题截图和代码 image 代码截图是下面这样的 image 不知道大家第一眼看了这个代码,什么感受?我第一眼的感受是密 ...
最新文章
- stm32 micropython vscode_在vscode里基于Pymakr插件进行esp32的micropython开发
- 研发项目进度管理软件正式上线
- 深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015
- 《剑指offer》— JavaScript(6)旋转数组的最小数字
- . NET5一出,. NET岗面试普遍喊难,真相是…
- 限制 计算机中 某用户上网 win7,Win7旗舰版怎么限制孩子的上网时间?电脑限制孩子上网时间的方法...
- 今天的绿得像碧玉的 飞鸽
- 条件注释判断兼容浏览器版本CSS HACK !--[if !IE]!--[if IE]!--[if lt IE 6]!--[if gte IE 6]...
- jQuery AJAX 与 jQuery 事件
- 牛客网暑期ACM多校训练营7: C. Bit Compression(DFS+预处理)
- VLC框架总结(二)VLC源码及各modules功能介绍
- Spring Boot内嵌Tomcat原理
- 基于Python计算Landsat8OLI遥感生态指数RSEI
- DroidCam通过数据线调用手机摄像头的方法二
- vue仿微博评论回复_vue-微博评论
- Python 3.9 新特性速览 - Ricequant米筐量化
- jqGrid设置表格列的背景色
- C措辞教程第四章: 数组(8)
- viewpage无限轮播
- 其实,APP文案还可以这样写·····