一道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 实现归并排序算法
Jun 05 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
python实现多层感知器
Jan 18 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 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生成HTML静态页面实例代码
2008/08/31 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
php微信开发之关注事件
2018/06/14 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
vue实现计算器功能
2020/02/22 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
Python程序语言快速上手教程
2012/07/18 Python
Python使用requests发送POST请求实例代码
2018/01/25 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
pycharm配置git(图文教程)
2019/08/16 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
Python识别html主要文本框过程解析
2020/02/18 Python
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
建筑行业的大学生自我评价
2013/12/08 职场文书
大学生冰淇淋店商业计划书
2014/01/14 职场文书
质量月活动策划方案
2014/03/10 职场文书
小学家长评语大全
2014/04/16 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
美术指导助理求职信
2014/04/20 职场文书
社区矫正工作方案
2014/06/04 职场文书
小英雄雨来观后感
2015/06/09 职场文书