一道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 WXPY实现微信监控报警功能的代码
Oct 20 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
Python制作词云的方法
Jan 03 Python
Python的iOS自动化打包实例代码
Nov 22 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Python列表list常用内建函数实例小结
Oct 22 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
python连接PostgreSQL过程解析
Feb 09 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
python实现mean-shift聚类算法
Jun 10 Python
Python 合并拼接字符串的方法
Jul 28 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程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
python正则表达式re模块详细介绍
2014/05/29 Python
编程语言Python的发展史
2014/09/26 Python
Python将图片转换为字符画的方法
2020/06/16 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
Python 绘制可视化折线图
2020/07/22 Python
python利用platform模块获取系统信息
2020/10/09 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
三星美国官网:Samsung美国
2017/02/06 全球购物
法务专员岗位职责
2014/01/02 职场文书
药品促销活动方案
2014/02/14 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
亲属关系公证书
2014/04/08 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
小学清明节活动总结
2014/07/04 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
雾霾停课通知
2015/04/24 职场文书
创业计划书之干洗店
2019/09/10 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python