递归走迷宫,练手。

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相关推荐

  1. java走迷宫_走迷宫问题Java递归

    public class MazeDemo { /* 走迷宫,1代表墙,从左上角的0走到右下角的0,找到一条通路,若存在,返回true,若不存在,返回false 1 1 1 1 1 1 1 1 0 0 ...

  2. 用Python写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)

    不要脸的放到了Github上面,嘿嘿. Github:https://github.com/Radium1209/Maze 先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和d ...

  3. python迷宫万花筒代码_用Python3写一个走迷宫的小程序(图形化:matplotlib,dfs,prim)...

    先看一下动态效果图(慢放): 首先生成迷宫: 主要用了两个算法:Prim和dfs 总结:Prim生成的比较像真正的迷宫,所以默认用了Prim生成迷宫 先输入n,m,会生成一个迷宫(prim生成),然后 ...

  4. java递归老鼠走迷宫_递归算法求老鼠走迷宫(C语言)

    /*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...

  5. Java递归解决老鼠走迷宫问题

    思路 1 表示障碍 代码 public class MiGong{public static void main(String[] args){int[][] map = new int[8][7]; ...

  6. 5978 Problem F 【递归入门】走迷宫

    问题 F: [递归入门]走迷宫 时间限制: 1 Sec 内存限制: 128 MB 提交: 128 解决: 46 题目描述 有一个n*m格的迷宫(表示有n行.m列),其中有可走的也有不可走的,如果用1表 ...

  7. java递归老鼠走迷宫_老鼠走迷宫----------递归问题

    老鼠走迷宫是一个典型的递归的问题,写几个这样的题才可以充分理解递归的过程. 写递归的过程有几点需要注意: (1)递归结束的条件 (2)递归过程的脉络,即逻辑要清晰. / // // 在迷宫中显示老鼠能 ...

  8. 华为OD机试 - 机器人走迷宫(Python)| 递归的使用

    OD统一考试B卷:机器人走迷宫 题目 房间有 X*Y 的方格组成,例如下图为6*4的大小.每一个放个以坐标(x,y)描述. 机器人固定从方格(0,0)出发,只能向东或者向北前进, 出口固定为房间的最东 ...

  9. 算法:老鼠走迷宫问题

    算法:老鼠走迷宫问题(初) [写在前面] 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. [问题描述] 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出 ...

最新文章

  1. Nature Genetics:微生物如何适应植物的?
  2. python基础教程第二版和第三版哪个好-最好的Python入门教材是哪本?
  3. 从Folly源码学C++ 11的新特性
  4. 【⛔拒绝内卷,学会shell,走遍天下都不怕⛔】shell编程基础
  5. linux kill命令详解
  6. ios开发之使用多文件上传的简单封装最原始的
  7. 14.4.3.5 Configuring InnoDB Buffer Pool Flushing 配置InnoDB Buffer Pool 刷新:
  8. Linux shell初识及权限理解
  9. 什么是php渲染,php数据渲染输出
  10. RedHat Linux 9.0 操作系统测试题2
  11. 人工智能来了 微智全景首款刷脸支付终端亮相
  12. java添加java_home环境变量_如何正确设置jdk环境变量JAVA_HOME?
  13. 方正飞鸿:构建中小企业“两化融合”新模式
  14. URLError: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify fai
  15. 生成100个p元素,隔行变色(红、黄、蓝、绿、紫)
  16. 小野さん と ペット
  17. 【记】Java 类属性首字母大写Response其结果为小写
  18. 银河麒麟操作系统开发_银河初级开发者指南
  19. 为什么我不建议编程初学者使用Vim,一张图告诉你
  20. Oracle:错误码ORA-28040 的坑

热门文章

  1. 金九银十铁12,看完弄懂,工资少说加 5K
  2. 微型计算机中 存储器的主要功能是,在计算机中存储器的主要作用是什么?
  3. oracle进程对文件没有写权限,ORACLE SYS用户没有权限一天半的救库过程
  4. python c++操作raw文件
  5. vs的资源管理器中一次性添加整个文件夹
  6. Pytorch v0.4.1发布:添加频谱范数,自适应Softmax,优化CPU处理速度,添加异常检测NaN等
  7. errors_impl.InvalidArgumentError: Input to reshape is a tensor
  8. 『TensorFlow』函数查询列表_张量属性调整
  9. Deep Learning(深度学习)学习笔记整理系列之(二)
  10. ORA-01504问题