文章目录
- 前言
 - 53.栈和队列的应用:迷宫问题
 - 54.使用栈解决迷宫问题
 - 55.使用队列进行迷宫问题:介绍
 - 56.使用队列进行迷宫问题:实现:
 - 总结
 
前言
学习python数据结构与算法,学习常用的算法,
 b站学习链接
53.栈和队列的应用:迷宫问题

先讲如何用栈实现走迷宫的思路: 栈----深度优先搜索
 回溯法
 思路:从一个节点开始,任意找下一个能走的点,当找到不能走的点时,退回上一个点寻找是否有其他方向的点。
 使用栈来存储当前路径
 比方说:规定只能走上下左右,优先顺序是上,右,下,左,有路可以走就走,标记走过的路,走过的路不能走,,把路径进栈,当有路不能走时,出栈。
这时,走不通了,回溯到上一步,看能不能走,因为标记过的路也不能走,所以一直出栈到第4步走的路,

 按照这个思路一直走到终点。
 
54.使用栈解决迷宫问题
1是墙,0是路
maze = [
    [1,1,1,1,1,1,1,1,1,1],
    [1,0,0,1,0,0,0,1,0,1],
    [1,0,0,1,0,0,0,1,0,1],
    [1,0,0,0,0,1,1,0,0,1],
    [1,0,1,1,1,0,0,0,0,1],
    [1,0,0,0,1,0,0,0,0,1],
    [1,0,1,0,0,0,1,0,0,1],
    [1,0,1,1,1,0,1,1,0,1],
    [1,1,0,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1]
]
 
lambda的用法
 主要用法是:
 将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
 例如,执行语句add=lambda x, y: x+y,定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add便成为具有加法功能的函数。例如,执行add(1,2),输出为3。
 所以这里dir()
优先顺序上下左右可以自己定,不影响最终能否找到路。

 故意把路堵住
 
55.使用队列进行迷宫问题:介绍
队列 —广度优先搜索 会一个一个分支去找路径最短的
 思路:
 从一个节点开始,寻找所有接下来能继续走的点,继续不断寻找,直到找到出口
 使用队列存储当前正在考虑的点。
一开始有两条路可以走,将这两条路径都存在队列里,假设往右走是第一个,往下走是第二个

 然后第一个出队,往下走的路径第三个进队,第二个出队,往下走的路径第四个进队。

 走过的路标记,不通的路就出队,队列只存当前可以走的路径。
 
 最终走到终点,这个路径且是最短的。

 简化到下图,右边矩形里的队列里存的当前要走的路径。
 
 如何找到终点把路径输出出来呢?假设7是终点
 开两个列表
 第一个列表存当前走的路,第二个列表存上一个路的下标,然后把它一一对应,倒着输出就是完整的路径。
 1是起点,上一个路没有,存-1,
 
56.使用队列进行迷宫问题:实现:
这个程序有点绕:
 主要在存上一个路的下标和输出路径,
 存路径用这个打比方,1是起点,7是终点,首先进1,然后出1 进2,把1 存在新的列表path里,1有三维数据(当前路径和-1),出2进3,再把2存在列表里,2有三维数据(当前路径和上一个路径在列表的下标,也就是0,或者说是len(list)-1),然后出3先进4再进5(人为规定优先级上右下左),然后3存到列表三个数据(当前路径和1)然后先出4进6(一个方向一个方向出)把4存到列表(当前路径和2)再出5进7,把5存到列表(当前路径和2,因为4要在下一个循环存,所里当前还是2),出6先9再进8,存6的路径和3(因为5还没有存,所以是3),出7,存当前路径和4(此时6没有存5存了),发现到达终点
 最终退出循环。
 
 输出路径:
 新创一个列表,将当前路径为最后一个路径,判断不是起点就找上一个路径在path里的位置,然后找到路径继续append到新列表里,直到起点退出,再把起点加上,倒序输出新列表。
前面迷宫和方向和前面栈的一样

总结
用栈和队列解决迷宫问题,队列能找到最短路径,栈能找到路径不保证最短。
 
文章目录
- 前言
 - 53.栈和队列的应用:迷宫问题
 - 54.使用栈解决迷宫问题
 - 55.使用队列进行迷宫问题:介绍
 - 56.使用队列进行迷宫问题:实现:
 - 总结
 




![[LeetCode算法->双指针]](https://img-blog.csdnimg.cn/img_convert/74e34e0780f0455c84af82854701d3a4.png)











![[JAVA安全]CVE-2022-33980命令执行漏洞分析](https://img-blog.csdnimg.cn/ca2467f0031a447790cad860009d0190.png)


