一道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 23 Python
python将一组数分成每3个一组的实例
Nov 14 Python
python实现dijkstra最短路由算法
Jan 17 Python
Python queue队列原理与应用案例分析
Sep 27 Python
python hashlib加密实现代码
Oct 17 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
如何基于Python实现word文档重新排版
Sep 29 Python
python中实现词云图的示例
Dec 19 Python
利用python做表格数据处理
Apr 13 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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版(2)
2006/10/09 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
php mysql like 实现多关键词搜索的方法
2016/10/29 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
js获取电脑分辨率的思路及操作
2013/11/22 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
jQuery EasyUI提交表单验证
2016/07/19 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python中将字典转换为列表的方法
2016/09/21 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
python实现维吉尼亚加密法
2019/03/20 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
python重要函数eval多种用法解析
2020/01/14 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
Python 列表反转显示的四种方法
2020/11/16 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
岗位职责风险防控
2014/02/18 职场文书
求职面试个人自我评价
2014/02/28 职场文书
体育专业求职信
2014/07/16 职场文书
管理失职检讨书
2015/05/05 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
《打电话》教学反思
2016/02/22 职场文书
golang使用map实现去除重复数组
2022/04/14 Golang
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript