一道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的装饰器的运用
May 05 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
获取Django项目的全部url方法详解
Oct 26 Python
Python定时器实例代码
Nov 01 Python
python中使用%与.format格式化文本方法解析
Dec 27 Python
详解python的ORM中Pony用法
Feb 09 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
python求最大值最小值方法总结
Jun 25 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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中动态显示签名和ip原理
2007/03/28 PHP
php 分页类 扩展代码
2009/06/11 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
php图片裁剪函数
2018/10/31 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
python制作简单五子棋游戏
2019/06/18 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
Python3如何对urllib和urllib2进行重构
2019/11/25 Python
Java多态性的定义以及类型
2014/09/16 面试题
婚前协议书怎么写
2014/04/15 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
事业单位考察材料范文
2014/12/25 职场文书
英文感谢信格式
2015/01/21 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
情况说明书怎么写
2015/10/08 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS