PHP前端开发

详解Python使用回溯法子集树模板解决迷宫问题

百变鹏仔 3小时前 #Python
文章标签 法子

这篇文章主要介绍了python使用回溯法解决迷宫问题,简单讲述了迷宫问题的原理并结合实例形式分析了python基于回溯法子集树模板解决迷宫问题的相关操作技巧与注意事项,需要的朋友可以参考下

本文实例讲述了Python使用回溯法解决迷宫问题。分享给大家供大家参考,具体如下:

问题

给定一个迷宫,入口已知。问是否有路径从入口到出口,若有则输出一条这样的路径。注意移动可以从上、下、左、右、上左、上右、下左、下右八个方向进行。迷宫输入0表示可走,输入1表示墙。为方便起见,用1将迷宫围起来避免边界问题。

分析

立即学习“Python免费学习笔记(深入)”;

考虑到左、右是相对的,因此修改为:北、东北、东、东南、南、西南、西、西北八个方向。在任意一格内,有8个方向可以选择,亦即8种状态可选。因此从入口格子开始,每进入一格都要遍历这8种状态。

显然,可以套用回溯法的子集树模板。

注意,解的长度是不固定的。

代码


# 迷宫(1是墙,0是通路)maze = [[1,1,1,1,1,1,1,1,1,1],    [0,0,1,0,1,1,1,1,0,1],    [1,1,0,1,0,1,1,0,1,1],    [1,0,1,1,1,0,0,1,1,1],    [1,1,1,0,0,1,1,0,1,1],    [1,1,0,1,1,1,1,1,0,1],    [1,0,1,0,0,1,1,1,1,0],    [1,1,1,1,1,0,1,1,1,1]]m, n = 8, 10  # 8行,10列entry = (1,0) # 迷宫入口path = [entry] # 一个解(路径)paths = []   # 一组解# 移动的方向(顺时针8个:N, EN, E, ES, S, WS, W, WN)directions = [(-1,0),(-1,1),(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1)]# 冲突检测def conflict(nx, ny):  global m,n,maze  # 是否在迷宫中,以及是否可通行  if 0 <p><strong>效果图</strong></p><p><img src="https://img.php.cn/upload/article/000/000/007/d8fd2f161d98024914d134e38f20018d-1.jpg" alt=""></p>