数据结构与算法:Python语言描述 栈和队列

迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径(而不是找所有的能行路径) 为了找到路径,可能需要逐一探查不同的可能分支 工作中需要缓存信息:如果当前位置存在多个可能探查方向,由于下步只能探查一个,需要把不能立刻处理的方向记下来,后面可能使用 向前搜索也有一些不同方式,可以比较冒进,也可以稳扎稳打 如果搜索还没找到出口,有一些可能做法。例如: 直到无路可走时才考虑其他选择,换一条没走过的路继续 每步都从最早记录的有选择位置向前,检查并保存另一个可达位置 无论如何,路径搜索中必须记录(缓存)有关信息,以供后面使用 迷宫问题 实现不同的路径搜索过程,需要用不同缓存结构保存分支点信息 用栈保存和提供信息,实现的是回到之前最后选择点继续的过程 用队列保存信息,就是总从最早遇到的选择点继续搜索 用栈保存信息,实际上是尽可能利用已经走过的路(改变最少) 下面先考虑实现这一过程的算法。算法里用一个栈保存分支点信息 用队列方式记录信息的可能性后面考虑 解决这个问题需要设计一种问题表示形式和一种确定可行方向的方式 注意:还要防止出现兜圈子的情况,为此需要记录到过的位置 如果不记录试探过的位置,在搜索通路的过程中就有可能重复探查某些局部路径,即使出口是可达的,也永远找不到 记录了探查过的位置,在搜索中检查,保证不重复探查任一位置 两种记录方式:1, 专门保存信息;2, 或直接记在“地图” (迷宫图) 上 迷宫问题 问题求解中的一项关键工作是选择合适的问题表示。这里采用: 一个整数“矩阵”(两层的 list)表示迷宫 入口和出口都用一对表下标表示(位置) 初始时,通路上的点用元素值为 0 表示,非通路点用 1 为避免无穷循环,搜索中把检查过的点标记为2(记录方法 2) 这样,尚未考虑过的通行位置的值是 0,否则都是不需要进一步考虑的(或者根本不是通路,或者是已经探查过的位置) 每个位置有四个相邻位置。为正确(且方便)地处理可能前进方向,要确定一种系统的检查方法。我们把一个位置的四邻看作“东南西北”四方位置,按这个顺序逐方向处理 对单元 (i, j),其相邻的四个位置的数组元素下标如右图所示 N (i-1,j) w (i,j-1) ? (i, j) E (i,j+1) S (i+1,j) 迷宫问题 用一个序对的 list 表示从任一 (i, j) 得到其四邻位置应该加的数对: dirs = [(0,1), (1,0), (0,-1), (-1,0)] 对于当前位置 (i, j),顺序加 dirs[0], dirs[1], dirs[2], dirs[3],就可以得到其东西南北的四个相邻位置 这一设计使检查当前位置四邻的工作可以通过一个循环完成 先定义两个简单的辅助函数(设 pos 是形式为 (i, j) 的序对): def mark(maze, pos): # 给迷宫 maze 的位置 pos 标 2 表示“到过” maze[pos[0]][pos[1]] = 2 def passable(maze, pos): # 检查迷宫 maze 的位置 pos 是否可行 return maze[pos[0]][pos[1]] == 0 先考虑用递归方式写出的算法,它比较简单,不需要辅助数据结构 如前所述,为支持递归执行,语言系统内部实际上有一个运行栈。采用递归的方式描述迷宫搜索,也就是利用这个运行栈 迷宫的递归求解 前面提出了对迷宫求解问题的递归观点,改写如下: 每个时候总有一个当前位置,开始时这个位置是迷宫入口 如果当前位置就是出口,问题已解决 如果从当前位置已无路可走,当前的探查失败 取一个与当前位置相邻的可行位置用同样方式探查,如果从那里有路径通往出口,也就找到了从当前位置到出口的路径 递归的迷宫求解算法是上述描述的实现,开始时把入口作为当前位置 mark 当前位置 检查它是否出口,如果是则成功结束 逐个检查当前位置的四邻是否可以通到出口(递归) 成功时,整个求解也成功 失败时放弃这个可能性 迷宫问题 递归实现的主函数如下: def find_path(maze, start, end): mark(maze, start); if start == end: # 已到达出口 print(start, end=" ") # 输出这个位置 return True # 成功结束 for i in range(4): # 否则按四个方向顺序探查 nextp = start[0]+dirs[i][0],

python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt相关推荐

  1. java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

    转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...

  2. mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...

    中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...

  3. 数据结构python课后答案_数据结构与算法:Python语言描述 1~5章课后习题

    数据结构与算法:Python语言描述 1~5章课后习题 发布时间:2018-07-19 20:42, 浏览次数:1885 , 标签: Python MarkDown语法写的,不知道为啥上传到CSDN不 ...

  4. 数据结构与算法python描述_数据结构与算法——Python语言描述.pdf

    数据结构与算法--Python语言描述.pdf 欢迎加入非盈利Python编学习交流程QQ群783462347,群里免费提供500+本Python书籍! 欢迎加入非盈利Python编程学习交流程QQ群 ...

  5. s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...

    <数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...

  6. mooc数据结构与算法python版期末考试_数据结构与算法Python版-中国大学mooc-试题题目及答案...

    数据结构与算法Python版-中国大学mooc-试题题目及答案 更多相关问题 婴儿出生一两天后就有笑的反应,这种笑的反应属于(). [判断题]填制原始凭证,汉字大写金额数字一律用正楷或草书书写,汉字大 ...

  7. python中ret是什么意思_数据结构图在python中的应用

    原标题:数据结构图在python中的应用 程序世界里,有很多的数据结构,比如:堆.栈.链表等等,今天要讲的就是图数据结构啦. 相信大家都使用过或者听说过图数据库吧,我们就来看看最简单的图数据结构算法. ...

  8. python中一个范围怎么表示_我应该如何处理Python中的包含范围?

    我在一个领域工作,在这个领域中,范围通常被包括在内地描述.我有人类可读的描述,例如from A to B,它表示包含两个端点的范围,例如from 2 to 4表示2, 3, 4. 在Python代码中 ...

  9. node 获取表单数据 为空_数据结构与算法(python)单向链表篇

    链表 数据表的构建需要预先知道数据的大小来申请连续的存储空间, 而在进行扩充的时候又需要进行数据的搬迁, 使用起来不是很灵活. 链表结构可以充分利用计算机内存空间, 实现灵活的内存动态管理. 简单来说 ...

最新文章

  1. 车辆匹配和平均车速计算
  2. Leetcode: Intersection of Two Arrays
  3. CSS中一个font缩写的实例
  4. solrCloud搭建
  5. C++Primer学习之二#define,const,constexpr
  6. 音频基础之Smaart7声卡测试
  7. 新版微信语音转发方法 萌妹子变声器手机版 微信语音怎么转发给别人
  8. java 同步操作降低效率解惑
  9. 视频教程-iOS企业级Swift项目实战之我的云音乐(第一部分)-iOS
  10. 网络上的罗刚·心灵之约
  11. 关于actor模型的优缺点分析
  12. 别样肉客首次针对中国市场独家研发创新植物性猪肉糜产品
  13. AI换脸技术再创新高度,DeepMind发布VQ-VAE二代算法
  14. 活动推荐丨当云计算遇到边缘计算
  15. House of apple 一种新的glibc中IO攻击方法
  16. 第五代选择器Icarus
  17. Linux 开机Started Update UTMP卡死处理
  18. 第六周小组作业:软件测试与评估
  19. 新手小白学JAVA 日期类Date SimpleDateFormat Calendar
  20. android 后台键盘按键监听,android键盘的监听

热门文章

  1. linux用户管理最常用的三个文件说明(不完整版)
  2. 求解一个数的所有约数之积
  3. 原因代码10044-Erdos number Time limit exceeded
  4. linux常用svn命令
  5. [导入]C#向Sql Server中插入记录时单引号的处理
  6. python 爬虫抓站
  7. 电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场
  8. UA MATH567 高维统计II 随机向量8 图的Max-cut问题 0.5近似算法的运行时间分析
  9. UA MATH566 统计理论7 一个例子:推导T检验
  10. 指针-指向函数指针数组的指针