迷宫python_Python走迷宫,递归 - nixBlog
递归走迷宫,练手。
23下午就写好的,可是测试几种不同的迷宫后,发现有个Bug,我以为算法有问题,今早才发现,原来是isDest函数里r和c都写成r了,拷贝out函数的语句再改写造成的悲剧。
#!/usr/bin/env python
# author: @nixzhu
# date: 2012.02.25
# description: Maze, use recursive.
#Door is (7, 7), as follow shows
# license: GPL
maze = [
[1,1,0,0,0,0,1,0],
[0,1,0,0,0,1,1,0],
[0,1,1,1,1,1,0,0],
[1,1,0,0,0,1,0,0],
[1,0,0,0,0,1,1,1],
[1,1,1,1,1,1,0,0],
[0,0,0,1,0,1,1,1],
[0,0,0,1,0,1,0,1]
]
maze_ = [
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]
]
def showMaze(maze):
print '-----------------S'
for line in maze:
for l in line:
print l,
print ''
print '-----------------E'
def findDest(p={'r':0, 'c':0}):
if out(p):
#print '>> ++ out\t', p['r'], p['c']
return False
#print '>> -- out\t', p['r'], p['c']
if isWall(p):
return False
if wasVisited(p):
return False
visit(p)
if isDest(p):
print '('+str(p['r'])+', '+str(p['c'])+')'
maze_[p['r']][p['c']] = '#'
return True
else:
if findDest(p=left(p)):
print '('+str(p['r'])+', '+str(p['c'])+')'
maze_[p['r']][p['c']] = '#'
return True
if findDest(p=up(p)):
print '('+str(p['r'])+', '+str(p['c'])+')'
maze_[p['r']][p['c']] = '#'
return True
if findDest(p=right(p)):
print '('+str(p['r'])+', '+str(p['c'])+')'
maze_[p['r']][p['c']] = '#'
return True
if findDest(p=down(p)):
print '('+str(p['r'])+', '+str(p['c'])+')'
maze_[p['r']][p['c']] = '#'
return True
return False
def out(p={'r':0, 'c':0}):
if p['r'] < 0 or p['r'] > 7:
return True
if p['c'] < 0 or p['c'] > 7:
return True
return False
def isWall(p={'r':0, 'c':0}):
if maze[p['r']][p['c']] == 0:
return True
else:
return False
def wasVisited(p={'r':0, 'c':0}):
if maze[p['r']][p['c']] == 2:
return True
else:
return False
def isDest(p={'r':0, 'c':0}):
if p['r'] == 7 and p['c'] == 7:
return True
else:
return False
def visit(p={'r':0, 'c':0}):
maze[p['r']][p['c']] = 2
def left(p={'r':0, 'c':0}):
return {'r':p['r'], 'c':p['c']-1}
def right(p={'r':0, 'c':0}):
return {'r':p['r'], 'c':p['c']+1}
def up(p={'r':0, 'c':0}):
return {'r':p['r']-1, 'c':p['c']}
def down(p={'r':0, 'c':0}):
return {'r':p['r']+1, 'c':p['c']}
if __name__=='__main__':
showMaze(maze)
if not findDest(p={'r':0, 'c':0}):# Enter is (0, 0)
print "No, can't find destination"
else:
print "Yes, find destination"
showMaze(maze)
showMaze(maze_)
基本上没什么说的,主要是递归的思想。
迷宫的形式:0是墙,1是可走路径,2代表被走过的路。maze_用来显示路径,直观些。
如果我早些在最后调用findDest函数时加上条件判断来确认findDest的返回值,我应该能早些发现isDest里字符的错误。开始检查了几遍函数,居然都没发现,眼神不行了。今早还以为是visit函数的调用位置有问题,胡乱试是不会有结果的。
迷宫python_Python走迷宫,递归 - nixBlog相关推荐
- java走迷宫_走迷宫问题Java递归
public class MazeDemo { /* 走迷宫,1代表墙,从左上角的0走到右下角的0,找到一条通路,若存在,返回true,若不存在,返回false 1 1 1 1 1 1 1 1 0 0 ...
- 用Python写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)
不要脸的放到了Github上面,嘿嘿. Github:https://github.com/Radium1209/Maze 先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和d ...
- python迷宫万花筒代码_用Python3写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)...
先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和dfs 总结:Prim生成的比较像真正的迷宫,所以默认用了Prim生成迷宫 先输入n,m,会生成一个迷宫(prim生成),然后 ...
- java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)
/*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...
- Java递归解决老鼠走迷宫问题
思路 1 表示障碍 代码 public class MiGong{public static void main(String[] args){int[][] map = new int[8][7]; ...
- 5978 Problem F 【递归入门】走迷宫
问题 F: [递归入门]走迷宫 时间限制: 1 Sec 内存限制: 128 MB 提交: 128 解决: 46 题目描述 有一个n*m格的迷宫(表示有n行.m列),其中有可走的也有不可走的,如果用1表 ...
- java递归老鼠走迷宫_老鼠走迷宫----------递归问题
老鼠走迷宫是一个典型的递归的问题,写几个这样的题才可以充分理解递归的过程. 写递归的过程有几点需要注意: (1)递归结束的条件 (2)递归过程的脉络,即逻辑要清晰. / // // 在迷宫中显示老鼠能 ...
- 华为OD机试 - 机器人走迷宫(Python)| 递归的使用
OD统一考试B卷:机器人走迷宫 题目 房间有 X*Y 的方格组成,例如下图为6*4的大小.每一个放个以坐标(x,y)描述. 机器人固定从方格(0,0)出发,只能向东或者向北前进, 出口固定为房间的最东 ...
- 算法:老鼠走迷宫问题
算法:老鼠走迷宫问题(初) [写在前面] 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. [问题描述] 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出 ...
最新文章
- Nature Genetics:微生物如何适应植物的?
- python基础教程第二版和第三版哪个好-最好的Python入门教材是哪本?
- 从Folly源码学C++ 11的新特性
- 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础
- linux kill命令详解
- ios开发之使用多文件上传的简单封装最原始的
- 14.4.3.5 Configuring InnoDB Buffer Pool Flushing 配置InnoDB Buffer Pool 刷新:
- Linux shell初识及权限理解
- 什么是php渲染,php数据渲染输出
- RedHat Linux 9.0 操作系统测试题2
- 人工智能来了 微智全景首款刷脸支付终端亮相
- java添加java_home环境变量_如何正确设置jdk环境变量JAVA_HOME?
- 方正飞鸿:构建中小企业“两化融合”新模式
- URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fai
- 生成100个p元素,隔行变色(红、黄、蓝、绿、紫)
- 小野さん と ペット
- 【记】Java 类属性首字母大写Response其结果为小写
- 银河麒麟操作系统开发_银河初级开发者指南
- 为什么我不建议编程初学者使用Vim,一张图告诉你
- Oracle:错误码ORA-28040 的坑
热门文章
- 金九银十铁12,看完弄懂,工资少说加 5K
- 微型计算机中 存储器的主要功能是,在计算机中存储器的主要作用是什么?
- oracle进程对文件没有写权限,ORACLE SYS用户没有权限一天半的救库过程
- python c++操作raw文件
- vs的资源管理器中一次性添加整个文件夹
- Pytorch v0.4.1发布:添加频谱范数,自适应Softmax,优化CPU处理速度,添加异常检测NaN等
- errors_impl.InvalidArgumentError: Input to reshape is a tensor
- 『TensorFlow』函数查询列表_张量属性调整
- Deep Learning(深度学习)学习笔记整理系列之(二)
- ORA-01504问题