一道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内置的模块与函数进行不同进制的数的转换
Mar 12 Python
tensorflow实现加载mnist数据集
Sep 08 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
python下载库的步骤方法
Oct 12 Python
django实现用户注册实例讲解
Oct 30 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
详解python 降级到3.6终极解决方案
Feb 06 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
Python-for循环的内部机制
Jun 12 Python
关于Python字符编码与二进制不得不说的一些事
Oct 04 Python
Python字典和列表性能之间的比较
Jun 07 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
COM in PHP (winows only)
2006/10/09 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
node.js通过url读取文件
2020/10/16 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
javascript实现时钟动画
2020/12/03 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
python计数排序和基数排序算法实例
2014/04/25 Python
python如何实现不用装饰器实现登陆器小程序
2019/12/14 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
小学教师师德反思
2014/02/03 职场文书
公证书标准格式
2014/04/10 职场文书
国庆宣传标语
2014/06/30 职场文书
五一促销活动总结
2014/07/01 职场文书
小学假期安全广播稿
2014/09/28 职场文书
个人总结与自我评价
2015/02/14 职场文书
务工证明怎么写
2015/06/18 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python