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 ...
随机推荐
- 使用MD5加密字符串
一.概念: MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值. 二 ...
- 两通道实信号使用一个FFT同时计算算法
前言 在工程的实际应用场景中,往往是需要最省资源量.而DSP资源和BRAM资源对FPGA来说弥足珍贵. 对于同时存在多个通道的实信号需要做FFT而言,常规做法是每个通道用一个FFT IP,FFT IP ...
- stm32 SD卡
容量等级 SD容量有8MB.16MB.32MB.64MB.128MB.256MB.512MB.1GB.2GB SDHC容量有2GB .4GB.8GB.16GB.32GB SDXC容量有32GB.48G ...
- sql将查询结果的某个字段赋值给另一个字段
Update a set a.NickName=b.name FROM AccountsInfo a, TT b where a.UserID=b.userId 必须要有关联的两个表
- Linux下知道一个命令却不知道哪个包提供(解决)
[root@localhost ~]# yum -y install jstack (1/2): epel/x86_64/primary_db | 6.8 MB 00:00:16 (2/2): epe ...
- 【故障处理】-OGG 丢失归档20190717
再次遇到OGG 异常: 归档丢失,OGG 不能找到需要的归档文件. 该表完整expdp 导出评估为 110G,了解到只有插入操作,所以只把归档丢失期间的数据补到目标端就好. 1. 清理目标端 2019 ...
- Interval 用法总结
语法:INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}] 该数据类型常用来表示一段时间差, 注 ...
- Make 和 Makefile快速入门
前言 一个项目,拥有成百上千的源程序文件,编译链接这些源文件都是有规则的.Makefile是整个工程的编译规则集合,只需要一个make命令,就可以实现“自动化编译”.make是一个解释makefile ...
- Linux学习笔记之二
vim编辑器 :三种工作模式 vim /tmp/xueying.txt 命令模式 a.i.o/esc \ :wq 保存并退出 / \ 输入模式 ...
- 关于MySQL中的锁机制详解
锁概述 MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则. 最显著的特点是不同的存储引擎支持不同的锁机制,InnoDB支持行锁和表锁,MyISAM支持表锁. 表锁就是把 ...