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 ...
随机推荐
- vs2015工程转化为vs2010
转换的步骤如下: (1)将工程是.sln用记事本打开后,更换以下信息如下: Microsoft Visual Studio Solution File, Format Version 11.00 ...
- VBA Exit Do语句
当想要根据特定标准退出Do循环时,可使用Exit Do语句. 它可以同时用于Do...While和Do...Until直到循环. 当Exit Do被执行时,控制器在Do循环之后立即跳转到下一个语句. ...
- template中实现加减乘除数学运算
django模板只提供了加法的filter,没有提供专门的乘法和除法运算:django提供了widthratio的tag用来计算比率,可以变相用于乘法和除法的计算. # 加法{{value|add:1 ...
- window事件
window事件是较为重要的事件,接下来就讲解一下. 1.获取页面滚动栏的距离 什么是滚动栏,就是网页内容过多时,通过滚轮控制上下显示或者左右显示: 为窗口添加滚动条事件: window.onscro ...
- var img = new Image()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- hashmap,hashtable,concurrenthashmap多线程下的比较(持续更新)
1.hashMap 多线程下put会造成死循环,主要是扩容时transfer方法会造成死循环. http://blog.csdn.net/zhuqiuhui/article/details/51849 ...
- ubuntu18.04 安装android studio
首先从官网下载android studio:Android Studio (安装前应先安装JDK环境) 得到android-studio-ide-191.5977832-linux.tar.gz 在安 ...
- WMware Workstation——时间和时区问题
对于学习Linux的人来说,最常见的做法就是在WMware Workstation下安装Linux系统.在WMware Workstation可能会有几处导致时间.时区问题. UTC时间导致时间不一致 ...
- python高级特性-sorted()
1.数字排序 >>> sorted([1,-12,13,-4],key=abs) [1, -4, -12, 13] 2.字符串排序 按ASCII排序 默认情况下,对字符串排序,是按照 ...
- 【python】使用openpyxl解析json并写入excel(xlsx)
目标: 将json文本解析并存储到excel中 使用python包 openpyx import simplejsonmport codecsimport openpyxl import os # d ...