本文实例讲述了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解决走迷宫问题算法示例相关推荐

  1. python迷宫问题算法_Python解决走迷宫问题算法示例

    本文实例讲述了Python解决走迷宫问题算法.分享给大家供大家参考,具体如下: 问题: 输入n * m 的二维数组 表示一个迷宫 数字0表示障碍 1表示能通行 移动到相邻单元格用1步 思路: 深度优先 ...

  2. python迷宫地图代码_Python机器人探测迷宫代码求助

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Python3.4,Windows系统 这个project的目的是让机器人可以走任意迷宫,在机器人走迷宫之前并不知道迷宫长什么样子,要在走过迷宫之后获取迷 ...

  3. python中最小公倍数函数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  4. python迷宫求解代码_Python中的迷宫求解

    我孜孜不倦地试图用python制作一个迷宫解算器.我已经使用了我所有的资源,比如朋友.互联网和堆栈.我已经根据之前的堆栈问题修改了很多代码,但是即使完全复制代码(我不喜欢这样做),也无法得到答案.在 ...

  5. python存文件代码_Python文件读写保存操作的示例代码

    记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项. 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之 ...

  6. java 迷宫代码_老鼠走迷宫代码 JAVA

    展开全部 //老鼠走迷宫程序 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Maze1 ...

  7. 编程题走迷宫_洛谷P1238 走迷宫题解

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  8. java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)

    /*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...

  9. python求最大值代码_python 最大值

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 推荐使用腾讯云 api 配套的 7 种常见的编程语言 sdk,已经封装了签名和请 ...

  10. python新年有趣代码_Python有趣时刻,这些代码让你大呼卧槽,怎么会这样

    分享一个实用问题,用python读取Excel并保存字典,如何做? 下面是该同学问题截图和代码 image 代码截图是下面这样的 image 不知道大家第一眼看了这个代码,什么感受?我第一眼的感受是密 ...

最新文章

  1. stm32 micropython vscode_在vscode里基于Pymakr插件进行esp32的micropython开发
  2. 研发项目进度管理软件正式上线
  3. 深度学习(二十五)基于Mutil-Scale CNN的图片语义分割、法向量估计-ICCV 2015
  4. 《剑指offer》— JavaScript(6)旋转数组的最小数字
  5. . NET5一出,. NET岗面试普遍喊难,真相是…
  6. 限制 计算机中 某用户上网 win7,Win7旗舰版怎么限制孩子的上网时间?电脑限制孩子上网时间的方法...
  7. 今天的绿得像碧玉的 飞鸽
  8. 条件注释判断兼容浏览器版本CSS HACK !--[if !IE]!--[if IE]!--[if lt IE 6]!--[if gte IE 6]...
  9. jQuery AJAX 与 jQuery 事件
  10. 牛客网暑期ACM多校训练营7: C. Bit Compression(DFS+预处理)
  11. VLC框架总结(二)VLC源码及各modules功能介绍
  12. Spring Boot内嵌Tomcat原理
  13. 基于Python计算Landsat8OLI遥感生态指数RSEI
  14. DroidCam通过数据线调用手机摄像头的方法二
  15. vue仿微博评论回复_vue-微博评论
  16. Python 3.9 新特性速览 - Ricequant米筐量化
  17. jqGrid设置表格列的背景色
  18. C措辞教程第四章: 数组(8)
  19. viewpage无限轮播
  20. 其实,APP文案还可以这样写·····

热门文章

  1. 866 数据结构模拟题(一)及解析
  2. Mybatis关联查询遇到的坑-无主键的关联数据去重
  3. java 物体移动不了总结_java9迁移注意问题总结
  4. 北大元培学院数学与计算机,通识教育试验的尴尬 北京大学元培学院近距离观察...
  5. 完美屏蔽中国移动,四川手机报发的信息。
  6. 中国手机用户换机越来越慢
  7. 【读书摘抄】人类简史
  8. LINUX中安装gotop检测页面
  9. YUV420P像素数据编码为JPEG图片
  10. Infor SyteLine ERP 安装后中文语言设置