一道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实现将英文单词表示的数字转换成阿拉伯数字的方法
Jul 02 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
Python 正则表达式入门(初级篇)
Dec 07 Python
Python执行时间的计算方法小结
Mar 17 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
浅析Python 引号、注释、字符串
Jul 25 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
用Python开发app后端有优势吗
Jun 29 Python
python绘图模块之利用turtle画图
Feb 12 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
在vue.js中抽出公共代码的方法示例
2017/06/08 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python读写文件操作示例程序
2013/12/02 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python elasticsearch环境搭建详解
2019/09/02 Python
python re.match()用法相关示例
2021/01/27 Python
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
抽象类和接口的区别
2012/09/19 面试题
电大毕业自我鉴定
2014/02/03 职场文书
逃课上网检讨书
2014/02/20 职场文书
办护照工作证明
2014/10/01 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书