一道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 17 Python
Python在图片中添加文字的两种方法
Apr 29 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
python基于SMTP协议发送邮件
May 31 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
jupyter notebook实现显示行号
Apr 13 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
Python实现自动签到脚本的示例代码
Aug 19 Python
python Selenium 库的使用技巧
Oct 16 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或ip地址段访问的方法
2015/02/25 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
简单叙述一下MYSQL的优化
2016/05/09 面试题
质量工程师岗位职责
2013/11/16 职场文书
工作自荐信
2013/12/11 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
企业车辆管理制度
2014/01/24 职场文书
安全生产汇报材料
2014/02/17 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
安全生产月演讲稿
2014/05/09 职场文书
学校欢迎标语
2014/06/18 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
导游词之桂林
2019/08/20 职场文书