一道python走迷宫算法题


Posted in Python onJanuary 22, 2018

前几天逛博客时看到了这样一道问题,感觉比较有趣,就自己思考了下方案顺便用python实现了一下。题目如下:

用一个二维数组表示一个简单的迷宫,用0表示通路,用1表示阻断,老鼠在每个点上可以移动相邻的东南西北四个点,设计一个算法,模拟老鼠走迷宫,找到从入口到出口的一条路径。

如图所示:

一道python走迷宫算法题

先说下我的思路吧:

1、首先用一个列表source存储迷宫图,一个列表route_stack存储路线图,一个列表route_history存储走过的点,起点(0,0),终点(4,4)。

2、老鼠在每个点都有上下左右四种方案可选,需要定义这些方案的执行方法。

3、最后做一个循环,如果当前点不是(4,4)的话就依次执行上下左右四种方法,但是有些限制,比如尝试走过的点不会再尝试走,(0,x)点无法再执行向上的方法等等。

贴一下代码:

# _*_ coding:utf-8 _*_  
route_stack = [[0,0]] 
route_history = [[0,0]] 
source=[[0,0,1,0,1],[1,0,0,0,1],[0,0,1,1,0],[0,1,0,0,0],[0,0,0,1,0]] 
def up(location): 
  #横坐标为0,无法再向上走 
  if location[1] == 0: 
    return False 
  else: 
    new_location = [location[0],location[1]-1] 
    #已经尝试过的点不会尝试第二次 
    if new_location in route_history: 
      return False 
    #碰到墙不走 
    elif source[new_location[0]][new_location[1]] == 1: 
      return False 
    else: 
      route_stack.append(new_location) 
      route_history.append(new_location) 
      return True 
 
def down(location): 
  if location[1] == 4: 
    return False 
  else: 
    new_location = [location[0],location[1]+1] 
    if new_location in route_history: 
      return False 
    elif source[new_location[0]][new_location[1]] == 1: 
      return False 
    else: 
      route_stack.append(new_location) 
      route_history.append(new_location) 
      return True 
 
def left(location): 
  if location[0] == 0: 
    return False 
  else: 
    new_location = [location[0]-1,location[1]] 
    if new_location in route_history: 
      return False 
    elif source[new_location[0]][new_location[1]] == 1: 
      return False 
    else: 
      route_stack.append(new_location) 
      route_history.append(new_location) 
      return True 
 
def right(location): 
  if location[0] == 4: 
    return False 
  else: 
    new_location = [location[0]+1,location[1]] 
    if new_location in route_history: 
      return False 
    elif source[new_location[0]][new_location[1]] == 1: 
      return False 
    else: 
      route_stack.append(new_location) 
      route_history.append(new_location) 
      return True 
lo = [0,0] 
while route_stack[-1] != [4,4]: 
  if up(lo): 
    lo = route_stack[-1] 
    continue 
  if down(lo): 
    lo = route_stack[-1] 
    continue 
  if left(lo): 
    lo = route_stack[-1] 
    continue 
  if right(lo): 
    lo = route_stack[-1] 
    continue 
  route_stack.pop() 
  lo = route_stack[-1] 
print route_stack

执行结果如下:

一道python走迷宫算法题

题目出处有另一种解题思路,但是我觉得有点烦,自己的这个比较好理解点,实现起来也比较方便。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的类实例属性访问规则探讨
Jan 30 Python
python图片验证码生成代码
Jul 02 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
python写入文件自动换行问题的方法
Jul 05 Python
Python3多线程版TCP端口扫描器
Aug 31 Python
Python FFT合成波形的实例
Dec 04 Python
Python安装whl文件过程图解
Feb 18 Python
基于python实现可视化生成二维码工具
Jul 08 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 #Python
python正则表达式及使用正则表达式的例子
Jan 22 #Python
Python深度优先算法生成迷宫
Jan 22 #Python
Python使用Tkinter实现机器人走迷宫
Jan 22 #Python
Python实现简单文本字符串处理的方法
Jan 22 #Python
Python简单实现控制电脑的方法
Jan 22 #Python
Zookeeper接口kazoo实例解析
Jan 22 #Python
You might like
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
vue element-ui实现input输入框金额数字添加千分位
2019/12/29 Javascript
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python动态性强类型用法实例
2015/05/09 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python制作exe文件简单流程
2019/01/24 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
JDO的含义
2012/11/17 面试题
Android面试宝典
2013/08/06 面试题
JAVA程序员面试题
2012/10/03 面试题
介绍一些UNIX常用简单命令
2014/11/11 面试题
禁止酒驾标语
2014/06/25 职场文书
驾驶员安全责任书
2014/07/22 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
个人作风建设总结
2014/10/23 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
详解Python类和对象内容
2021/06/22 Python
Windows server 2012搭建FTP服务器
2022/04/29 Servers