一道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自定义类的数组排序实现代码
Aug 28 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
PyQt5实现下载进度条效果
Apr 19 Python
Django实现全文检索的方法(支持中文)
May 14 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
Python进阶之@property动态属性的实现
Apr 01 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
python编写猜数字小游戏
Oct 06 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 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 注册时输入信息验证器的实现详解
2013/07/05 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
PHP 实现重载
2021/03/09 PHP
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
jQuery中size()方法用法实例
2014/12/27 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
详解Django中的form库的使用
2015/07/18 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python生成器实现简单"生产者消费者"模型代码实例
2020/03/27 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
文员岗位职责
2015/02/04 职场文书
情况说明书怎么写
2015/10/08 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
工作建议书范文
2019/07/08 职场文书
SpringBoot生成License的实现示例
2021/06/16 Java/Android
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python