一道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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
对python函数签名的方法详解
Jan 22 Python
Python 转换文本编码实现解析
Aug 27 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
Feb 21 Python
Django操作session 的方法
Mar 09 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
python如何导入依赖包
Jul 13 Python
python单向链表实例详解
May 25 Python
Python中的socket网络模块介绍
Jul 23 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文件读写操作之文件读取方法详解
2011/01/13 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
网页图片延时加载的js代码
2010/04/22 Javascript
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
Jquery easyUI 更新行示例
2014/03/06 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
匡威英国官网:Converse英国
2018/12/02 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
2014年转正工作总结
2014/11/08 职场文书
谢师宴答谢词
2015/01/05 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
小学音乐课教学反思
2016/02/18 职场文书
2019同学聚会主持词
2019/05/06 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript