【零基础】学python数据结构与算法笔记9

news2024/11/20 11:51:10

文章目录

  • 前言
  • 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.使用队列进行迷宫问题:实现:
  • 总结


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记之Linux】工具之vim配置

配置文件的位置: 在目录/etc/下面有一个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效;   每个用户可以在自己的主目录下创建一个私有的配置文件,命名为“.vimrc”,这个配置只对自己有效…

如何利用MOS管实现双向电平转换

前面讲过的三极管和MOS管电平转换电路都是单向的,就是信号只能是从A输出到B输入。其实单个MOS管也能实现双向电平转换,即信号即能从A输出到B输入,也能从B输出到A输入。实际电路就是这个,包含一个MOS管和两个电阻,芯片1…

自定义启动器

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉SpringBoot专栏 🔥欢迎大佬指正,一起学习!一起加油! …

D. Meta-set(组合数学)

Problem - D - Codeforces 你喜欢纸牌棋盘游戏“集合”。每张牌包含k个特征,每个特征都等于集合{0,1,2}中的一个值。这副牌包含所有可能的纸牌变体,也就是说,总共有3k张不同的纸牌。 如果三张牌的某个特征与这三张牌相同或两两不同&#xff0…

[LeetCode算法->双指针]

在算法中,双指针的问题较为常见,应用也比较广泛,双指针问题能够降低时间复杂度和空间复杂度,有必要掌握这一内容。下面通过LeetCode的题目来说明双指针。1.给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的…

Minecraft 1.19.2 Fabric模组开发 03.动画生物实体

我们本次尝试在1.19.2 Fabric中添加一个能够具有各种动画效果动作的生物实体。 效果展示效果展示效果展示 1.首先,为了实现这些动画效果,我们需要首先使用到一个模组:geckolib(下载地址) 找到项目的build.gradle文件,在repositories和depen…

vue实现网页端企业微信扫码登录功能(前端部分)

时至今日,企业微信在企业日常工作中的使用越来越频繁也越来越重要,不少企业已使用企业微信进行着日常的工作安排管理。在这种背景下,各类系统和企业微信对接的需求也不断增加,今天要说的就是一个比较常见的需求:在网页…

第08讲:Docker中的网络类型bridge和host

Docker 中的网络模式早先是 3 种,后来又加了 1 种,一共是 4 种。这里,我们只涉及、介绍使用其中 2 种网络模式:bridge 模式和 host 模式。 bridge 是驱动( Driver )类型为 bridge 的默认网络;h…

『 MySQL篇 』:库操作、数据类型

目录 目录 一、初识数据库 数据库 数据库管理系统 SQL语言 二、详解MySQL MySQL 存储引擎 三、简单的库操作 设置数据库的编码字符集 创建数据库 显示数据库 使用数据库 删除数据库 四、MySQL数据类型 数值类型 字符串类型 日期类型 一、初识数据库 学习 MyS…

SpringBoot整合ELK教程

SpringBoot整合ELK教程 1 基础概念 ELK 即 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统,本文主要讲解使用 ELK 来收集测试框架产生的日志。 Elasticsearch:用于存储收集到的日志信息;Logstash:用于…

如何成为优秀合格的管理者之角色定位

目录 导语 一、管理者的角色误区和角色定位 (一)管理者对上级 (二)管理者对下属 *如何要做好“老师”的角色? (三)管理者跨部门协作 (四)管理者对自己 二…

springboot:接手老项目,领导让更新数据库说明文档,如何3分钟完成任务

0 引言 最新在重新整理老项目的文档,其中数据库说明文档上一版更新还是在1年多前,文档中的数据结构说明与当前数据库严重脱节,所以更新数据库说明文档已经是迫在眉睫的事情了。 因为项目是一个比较大型且“年长‘的项目,涉及了多…

谷粒商城-基础篇-Day09-整合Ware服务

整合Ware服务 将服务注册到nacos中 spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-wareMapperScan("com.atguigu.gulimall.ware.dao")//mybatis包扫描 SpringBootApplication EnableDiscoveryClient//开启服务发现 EnableT…

进入内存,透彻理解数据类型存在的意义,整形在内存中存储,大小端字节序,浮点型在内存中存储

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习C进阶、数据结构、算法、JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛!📜所属专栏:C语言✈往期博文回顾:【Java基础篇…

Java——》AtomicInteger源码分析

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Java——》AtomicInteger源码分析一、测试用例二、…

Java基础学习笔记(一)面向对象

序言:主要记录一下java的学习笔记,用作面试复习,参考的学习资料是尚硅谷Java网课链接 面向对象是P39~P69内容 文章目录一、类和对象二、传值方式三、静态与静态代码块四、包五、构造方法六、继承与构造方法七、多态八、方法的重载与重写8.1 …

[JAVA安全]CVE-2022-33980命令执行漏洞分析

前言 在 i春秋的漏洞靶标上看见了此漏洞,所以前来分析一下漏洞原理,比较也是去年 7月的漏洞。 漏洞描述:Apache官方发布安全公告,修复了一个存在于Apache Commons Configuration 组件的远程代码执行漏洞,漏洞编号&am…

Linux驱动

Linux驱动 驱动 1.驱动课程大纲  内核模块  字符设备驱动  中断 2.ARM裸机代码和驱动有什么区别?  共同点:都能够操作硬件 (都操作寄存器)  不同点:  裸机就是用C语言给对应的寄存器里面写值,驱动是按照一定的框架格…

FastReport .NET 2023.1.8 Crack

FastReport .NET适用于 .NET 6、.NET Core、Blazor、ASP.NET、MVC 和 Windows 窗体的全功能报告库。它可以在 Microsoft Visual Studio 2022 和 JetBrains Rider 中使用。 快速报告.NET 利用 .NET 6、.NET Core、Blazor、ASP.NET、MVC、Windows Forms 和 Mono 数据表示领域专家…

前端入门笔记07 —— js应用

DOM基础 document object model 基本操作 增删改查 查: document成员函数传入 id class tagName等内容获取DOM节点css选择去查询节点获取的DOM对象访问DOM对象的成员 let domResult; domResult document.getElementsByTagName(li); //返回一个类数组对象 Node…