一道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之总结参数的传递
Oct 10 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
Python实现调度算法代码详解
Dec 01 Python
Python字典及字典基本操作方法详解
Jan 30 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
《与孩子一起学编程》python自测题
May 27 Python
django连接mysql配置方法总结(推荐)
Aug 18 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
Python实现图像的垂直投影示例
Jan 17 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
Python文件的操作示例的详细讲解
Apr 08 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python实现全排列的打印
2018/08/18 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
Python流程控制 if else实现解析
2019/09/02 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
自考自我鉴定范文
2013/10/30 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
办公室主任个人总结
2015/02/28 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
考研经验交流会策划书
2015/11/02 职场文书