python 迷宫问题
# -*- coding:utf- -*- from collections import deque # 引入队列 maze = [
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,],
[,,,,,,,,,]
] # 四个移动方向
dirs = [
lambda x,y: (x+, y), # 下
lambda x,y: (x-, y), # 上
lambda x,y: (x, y-), # 左
lambda x,y: (x, y+) # 右
] def print_r(path):
"""打印路径"""
curNode = path[-] # 最后一个节点
realpath = [] # 出去的路径
while curNode[] != -: # 判断最后一个节点的标记是否为-,如果是-1说明是起始点,如果不是-1就继续查找
realpath.append(curNode[:]) # 拿到并添加节点x,y坐标信息
curNode = path[curNode[]] # 这里curNode[]是当前节点的前一步节点的标识:path的下标,因此path[curNode[]]拿到前一节点 realpath.append(curNode[:]) # 在这里curNode[] == -,是迷宫起点,将坐标信息加入路径 realpath.reverse() # 将列表倒序,将前面生成的从后往前的列表变为从前往后
print(realpath) def maze_path_queue(x1, y1, x2, y2): # (x1,y1)代表起点;(x2,y2)代表终点
"""用队列实现迷宫问题——深度优先搜索"""
queue = deque() # 创建队列
queue.append((x1, y1, -)) # 加入起点,第三个参数是记录时谁让它来的,这里起始点设置为-
path = [] # 保存出队节点
while len(queue) > : # 只有队不空就一直循环
curNode = queue.pop() # 队首节点出队,并存为当前节点变量
path.append(curNode) # 添加到path列表
if curNode[] == x2 and curNode[] == y2: # 判断是否找到终点
print_r(path) # 如果到达终点,打印路径
return True for dir in dirs: # 搜索四个方向
nextNode = dir(curNode[], curNode[]) # curNode[],curNode[]分别是当前节点x、y
if maze[nextNode[]][nextNode[]] == : # 如果有路可走
queue.append((nextNode[], nextNode[], len(path) - )) # 后续节点进队,标记谁让它来的:path最后一个元素的下标
maze[nextNode[]][nextNode[]] = # 设置为2,标记为已经走过 else: # 如果队列为空(当前节点到了死路,节点删除没有新节点加入),没有路
print("没有路")
return False maze_path_queue(,,,)
python 迷宫问题的更多相关文章
- Python迷宫生成器
作为一项古老的智力游戏,千百年来迷宫都散发着迷人的魅力.但是,手工设计迷宫费时又耗(脑)力,于是,我们有必要制作一个程序:迷宫生成器-- 好吧,我编不下去了.但是,从上面的文字中,我们可以看出,我们此 ...
- Python迷宫游戏(基础版)
# 画地图map_data = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 1, 0, 0, 0, ...
- 迷宫问题python实现(靠右手摸墙)
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 这是大二时候的数学模型毕业课程设计,我选择了自己研究盲人穿越迷宫的问题.当然后来再在网上查了这个问 ...
- 06.队列、python标准库中的双端队列、迷宫问题
class QueueUnderflow(ValueError): """队列为空""" pass class SQueue: def __ ...
- 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫
定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...
- 【强化学习】python 实现 q-learning 迷宫通用模板
本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10145797.html 0.说明 这里提供了二维迷宫问题的一个比较通用的模板,拿到后需要修改 ...
- python 回溯法 子集树模板 系列 —— 2、迷宫问题
问题 给定一个迷宫,入口已知.问是否有路径从入口到出口,若有则输出一条这样的路径.注意移动可以从上.下.左.右.上左.上右.下左.下右八个方向进行.迷宫输入0表示可走,输入1表示墙.为方便起见,用1将 ...
- 算法之--回溯法-迷宫问题【python实现】
题目描述 定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, ...
- python之迷宫BFS
# @File: maze_queue_bfs from collections import deque maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0 ...
随机推荐
- WebClient 下载文件
WebClient用法小结(转载) 如果只想从特定的URI请求文件,则使用WebClient,它是最简单的.NET类,它只用一两条命令执行基本操作,.NET FRAMEWORK目前支持以http: ...
- 2019年全国高校sql数据库
2019年全国高校名单sql数据库信息: 根据教育部发布的文件整理形成可用.sql文件,导入数据库即可使用. 包括全国高等学校共计2956所,其中:普通高等学校2688所(含独立学院257所),成人高 ...
- kafka的安装及使用(单节点)
介绍了linux环境下,kafka 服务的安装与配置 安装 jdk 环境 下载 kafka 源码包放到服务器,解压 开启 zookeeper 开启 kafka server 创建主题 开启生产者 开启 ...
- 大专生自学web前端到找到工作的经验
先做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学 ...
- 开始Swift学习之路
Swift出来好几个月了,除了同事分享点知识外,对swift还真没有去关心过.GitHub上整理的学习Swift资料还是很不错的,目前也推出了电子书和PDF格式. Swift的语法和我们平常开发的语言 ...
- request-html模块 (上)
requests-html模块 官方网站 Github网址 请求数据 from requests_html import HTMLSession session = HTMLSession() req ...
- C++——new & delete
C++ new Complex类 String类 C++ delete Comlex类 String类 array new 一定要搭配array delete VC架构下new内存分配演绎 Linux ...
- ubuntu 中安装sublime-text3
ubuntu 中安装sublime_text3Enter "Alt+m" will show Markdown Preview 安装 输入注册码 汉化 安装插件 中文输入bug修复 ...
- CaaSP4 - 命令记录
worker01:~ # tree /var/lib/containers/storage/ -L 1 /var/lib/containers/storage/ ├── mounts ├── over ...
- 【OF框架】在Visual Studio中发布Docker镜像,推送镜像到Azure容器注册表
准备 拥有Azure账号,已经创建 Azure容器注册表,获得注册表地址.账号.密码 本地已经在Visual Studio登录Azure账号. 本地已经拥有Docker环境 注意:首次发布Docker ...