本文实例讲述了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实现,提供给大家参考一下:

希望本文所述对大家Python程序设计有所帮助。

python迷宫问题算法_Python解决走迷宫问题算法示例相关推荐

  1. 刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java)

    刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java) https://www.lanqiao.cn/problems/234/learning/ http://lx.lanqia ...

  2. 算法:老鼠走迷宫问题

    算法:老鼠走迷宫问题(初) [写在前面] 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. [问题描述] 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出 ...

  3. c语言老鼠走迷宫课程设计,C语言算法之老鼠走迷宫

    1.Algorithm Gossip: 老鼠走迷官(一)说明:老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法: ...

  4. 广度优先算法_算法浅谈——走迷宫问题与广度优先搜索

    本文始发于个人公众号:TechFlow,原创不易,求个关注 在之前周末LeetCode专栏当中,我们详细描述了深度优先搜索和回溯法,所以今天我们继续这个话题,来和大家聊聊搜索算法的另一个分支,广度优先 ...

  5. 用Q-learning算法实现自动走迷宫机器人

    项目描述: 在该项目中,你将使用强化学习算法,实现一个自动走迷宫机器人. 如上图所示,智能机器人显示在右上角.在我们的迷宫中,有陷阱(红色炸弹)及终点(蓝色的目标点)两种情景.机器人要尽量避开陷阱.尽 ...

  6. 【算法】机器人走迷宫(适用于走迷宫、最短路径算法)-20200412

    标题:机器人走迷宫(适用于走迷宫.最短路径算法) 问题描述: 一块矩形方格,含有障碍和可通行格子,求从某一点到另外一点的最短距离?N*M的矩阵: 其中,1代表障碍,0代表可通行:示例:给定二维矩阵 0 ...

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

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

  8. 【算法】机器人走迷宫破壁解法(适用于走迷宫、最短路径算法)-20200412

    标题:机器人走迷宫破壁解法(适用于走迷宫.最短路径算法)-20200412 问题描述: 一块矩形方格,含有障碍和可通行格子,求从某一点到另外一点的最短距离?N*M的矩阵: 其中,1代表障碍,0代表可通 ...

  9. acwing算法基础课 844. 走迷宫

    acwing 844. 走迷宫(bfs模板题) 传送门 题目大意:给你一个n * m的矩阵问你从左上角走到右下角最小需要几步,输出步数,其中矩阵里面只包含0和1两个数字,0表示可以走,1表示有障碍 思 ...

最新文章

  1. 百个JavaScript函数以及基础写法汇总
  2. struts2中解决下载文件名中文乱码问题
  3. 陝西省2021年高考成绩查询,2021年高考陕西省各批次录取分数线预测,你会感到意外吗?...
  4. SparkSQL发展历史,DataFrame,SparkSQL的数据源,运行框架,tree和rule,Rule,Context运行过程,hiveContext运行过程,SparkSQL CLI等
  5. 从open系统调用的源码看文件的打开过程
  6. MVC中不能使用原生态的#include ,可替代的解决方案
  7. 简析EDMX文件的构成 - CSDL、SSDL、MSL
  8. LeetCode - Easy - Excel Sheet Column Title
  9. 实战-动手开发第一个区块链投票DAPP
  10. 用cmd命令简单创建oracle 数据库、用户和表空间
  11. 动态规划实战12 leetcode-472. Concatenated Words
  12. shell script语法高亮和自动缩进的配置
  13. 计算机考试祝福,考试前说的祝福语汇编35句 参加考试前的祝福语
  14. 线性系统和非线性系统——《应用非线性动力学》读书笔记
  15. 树育发统系物生微归递递归微生物系统发育树
  16. 微信模拟地理位置_微信电脑版伪装地理位置的方法
  17. origin三图合一_神教程:Origin也能玩转图片拼接组合排版
  18. GB:香港城市大学孙燕妮组发表高准确度病毒株识别工具VirStrain
  19. 通用管理平台GBase 8c Platform
  20. 09_Filter过滤器(访问所有资源前,首先执行自定义过滤器类的doFilter方法)_Listener监听器(监听域对象的改变)

热门文章

  1. matlab绘制海洋图
  2. 服务器绑定域名+腾讯云免费证书的申请+宝塔部署SSL证书+简单网站部署
  3. React 实现js跳转路由
  4. 计算机应用技术轻薄本,高配置轻薄笔记本推荐,终结你的选择困难症!
  5. linux截图保存文件夹,linux 下截图工具(转)
  6. mac终端运行python文件
  7. 2022年9月8日百度网盘全自动扩容软件技术功能分析
  8. AIGC如此火爆,有何机会? 10位大咖有话要说
  9. QT中添加图片资源的方法
  10. 进去qq群的网站,点击加群组件