失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

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

时间:2021-06-16 03:36:51

相关推荐

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

数据结构与算法: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》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。