一道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 19 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
django 创建过滤器的实例详解
Aug 14 Python
Python装饰器原理与用法分析
Apr 30 Python
用pycharm开发django项目示例代码
Jun 13 Python
python输入多行字符串的方法总结
Jul 02 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
python3实现的zip格式压缩文件夹操作示例
Aug 17 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 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 XML操作类DOMDocument
2009/12/16 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
Vuex 入门教程
2018/01/10 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
基于Python3 逗号代码 和 字符图网格(详谈)
2017/06/22 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
面向对象编程OOP的优点
2013/01/22 面试题
物理教学随笔感言
2014/02/22 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
乒乓球比赛通知
2015/04/27 职场文书
早会开场白台词大全
2015/06/01 职场文书
第一书记观后感
2015/06/08 职场文书
五年级作文之想象作文
2019/10/30 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫