有趣的图(三)(57)

news2024/11/25 2:59:27

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

咱们之前分别学习了图的基本概念,和图的深度优先遍历算法dfs。

你学会了吗?

咱们今天要学习图的另一种遍历方法:

广度优先遍历

广度优先遍历

广度优先遍历(Breadth First Search)是一种图的遍历算法,它从一个顶点出发,沿着与该顶点相邻的所有边进行遍历,直到无法继续为止。

然后再回溯到上一个顶点,沿着与该顶点不相邻的其他边进行遍历,直到无法继续为止。

重复这个过程,直到所有顶点都被访问过为止。

深度优先和广度优先

分别对下图进行深度优先遍历和广度优先遍历

深度优先搜索(Depth First Search)

先选择一条路一直往前走,走到尽头后,就返回到上一个交叉路口选择另一条没走过的路。

一直重复,这样就能走完所有的地点。

像不像老鼠走迷宫,一条路一条路地尝试?

深度优先搜索的一种实现:

广度优先搜索(Breadth First Search)

从顶点开始,先访问距离起始顶点长度为1的顶点,再访问距离起始顶点长度为2的顶点。

如此反复。

广度优先搜索的一种实现:

广度优先代码实现

假设从0开始,实现上图的广度优先遍历。

首先访问距离顶点0长度为1的结点{1,2,3}

然后访问距离顶点0长度为2的顶点{4,6},

然后访问长度为3的顶点{5},

最后访问长度为4的顶点{7}。

具体该怎么实现呢?

这里需要用到一个双端队列。

双端队列

双端队列(Deque)是一种允许我们同时从前端和后端添加和删除元素的特殊队列,它是队列和栈的结合体。 

相对于普通队列,双端队列的入队和出队操作在两端都可进行。

双端队列初始状态为{0}。

我们访问0后,0从队首出队,同时用集合记录0已经被访问。将0的邻接顶点{1,2,3}从对尾入队,这都是距离起始顶点长度为1的节点。

然后1从队首出队,同时用集合记录1已经被访问。将1的邻接顶点从对尾入队,这都是距离起始顶点长度为2的节点。(也可能是2或3,看123入队的顺序)。

依次访问2和3,并用集合记录以访问,其邻接顶点分别从队尾入队。

如上反复,知道双端队列为空。

参考代码:

1行:deque 是Python标准库 collections 中的一个类,实现了两端都可以操作的队列,相当于双端队列,与Python的基本数据类型列表很相似。

15行:将起始顶点的邻接顶点添加到队列中。

16行:将起始顶点放入以访问过的结合中。

17行:如果队列非空,则继续访问。

18行:从队首弹出元素,进行访问。

20~23行:判断出队元素的邻接顶点没有被访问,放入队列尾部。

你学会了吗?

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

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

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

相关文章

Linux系统的tty架构及UART驱动详解

​一、模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称为UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。 作为把并…

面试问题总结----C/C++部分

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应用,有接触SLAM、Linux、ROS、C/C++、DJI OSDK等; 3、参加工作后…

C++程序流程结构

目录 程序流程结构 一、选择结构 1.1 If语句 1.2 三目运算符 1.3 switch语句 二、循环结构 2.1 while 循环语句 2.2 do…while循环 2.3 for循环 2.4 嵌套循环 三、跳转语句 3.1 break语句 3.2 continue 语句 3.3 goto语句 程序流程结构 C/C支持最基本的三种程…

20230623在WIN10安装PROTEL DXP2004(STEP-BY-STEP)

20230623在WIN10安装PROTEL DXP2004(STEP-BY-STEP) https://xiazai.zol.com.cn/detail/43/428470.shtml Protel DXP 2004 https://www.onlinedown.net/soft/580490.htm Protel DXP 2004 DXP2004 安装步骤 Failed To load Parallel Port Driver Welcom…

vue或react中修改组件样式的方法

vue或react中修改组件样式的方法 从组件库中引入的组件深度选择器:deep和:global深度选择器在scss中的使用关键点 常规的组件样式修改vue中的样式修改react中的样式修改 从组件库中引入的组件 深度选择器:deep和:global 在 Vue …

Python 算法交易实验63 关于回测

说明 项目结束了,这几天把量化第一版搭起来,量化很重要,现在可以迈出第一步了。首先要关注的是回测,和前不久写的这篇文章呼应,测试的确是一个相对独立,又非常重要的部件。过去比较少关注在方面上&#xf…

数据分析案例-航空公司满意度数据可视化

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【瑞萨RA_FSP】ADC——电压采集

文章目录 一、ADC简介二、ADC的结构框图1. 电压输入范围2. 工作模式3. 转换过程顺序4. 触发源5. ADC转换时间6. 数据寄存器7. 电压转换 一、ADC简介 ADC即模拟数字转换器,ADC英文全称(Analog-to-digital converter), 是一种用于将…

Delphi XE10 dxLayoutControl 控件应用指南

Delphi XE10 dxLayoutControl 控件应用指南 DevExpress VCL套件是一套非常强大的界面控件,可惜关于Delphi开发方面的说明太少,有些控件使用起来一头雾水,不知从何下手。本节详细介绍在Delphi Xe10 Seattle中如何利用dxLayoutControl 控件来做…

MMENGINE.LOGGING

MMENGINE.LOGGING 文章目录 MMENGINE.LOGGING[Print_log](https://mmengine.readthedocs.io/zh_CN/latest/api/generated/mmengine.logging.print_log.html "Print_log")[MMENGINE.LOGGING.LOGGER 源代码](https://mmengine.readthedocs.io/zh_CN/latest/_modules/mm…

Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II

目录 88. 合并两个有序数组 Merge Sorted Array 🌟  89. 格雷编码 Gray Code 🌟🌟 90. 子集 II Subsets II 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Py…

计算机网络-网络体系结构

目录 计算机网络的基本概念计算机网络的定义组成与功能计算机网络的分类按照网络的作用范围进行分类按照网络的使用者进行分类 计算机网络主要性能指标 计算机网络体系结构计算机网络协议、接口、服务等概念ISO/OSI 参考模型和 TCP/IP 模型OSI七层模型TCP/IP 模型封装与分用 计…

[Hadoop之Hive安装配置 第二篇 ]

前言: 记录一下Hive笔记 目录 前言: Hive的基本简介,使用场景介绍 安装地址: 官网的Hive文档地址: 官网 Hive 的教程地址 Hive安装涉及到的应用介绍 Hive安装步骤: 1.解压hive压缩包, tar -zxvf 压缩包,然后进入module目录 查看压缩的文件 ,并改名为hive 2. pwd查看当…

Paper | CenterPoint

CenterPoint paper 文章目录 CenterPoint paper摘要IntroductionRelated WorkCenterPointTwo-Stage CenterPoint Reference 论文链接:https://arxiv.org/pdf/2006.11275.pdf 代码链接:https://github.com/tianweiy/CenterPoint 摘要 该文章是Center-ba…

SpringBoot--日志

日志的作用? 记录用户登陆日志,方便分析用户是正常登陆还是恶意破解用户记录系统的操作日志,方便数据恢复和定位操作人记录程序的执行时间,方便为以后优化程序提供数据支持 日志是程序的重要组成部分,最重要的用途是…

Leetcode | 40 组合总和II

40 组合总和II 文章目录 40 组合总和II题目官方解法:回溯思路与算法 codeReference 题目 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能…

【哈佛积极心理学笔记】第12讲 写日记

第12讲 写日记 preparationincubation (take a break, need some rest time)evaluationelaboration JP Morgan’s quote, I can do a year’s work in 9 months but not in 12" a simple technique of intervation: journaling Postive emotions and painful emotions…

CSS基础学习--12 分组 和 嵌套 选择器

一、分组选择器 在样式表中有很多具有相同样式的元素 h1 {color:green; } h2 {color:green; } p {color:green; } 为了尽量减少代码&#xff0c;你可以使用分组选择器。 每个选择器用逗号分隔。 在下面的例子中&#xff0c;我们对以上代码使用分组选择器&#xff1a; <!DO…

windows下cmake的小白级入门使用教程(hello world)

想学习cmake&#xff0c;基于惯性思维&#xff0c;想先跑通一个“hello world”的例子&#xff0c;奈何网上教程一大把&#xff0c;有用的教程破费功夫寻找。大部分教程都没有从新电脑(重装系统后的电脑)的角度讲述步骤。 为了得到干净的电脑环境&#xff0c;研究了一段时间VMw…

【图像任务】Transformer系列.3

本文介绍3篇改进Transformer以实现不同图像任务的工作&#xff1a;少样本医学图像分割CAT-Net&#xff08;arXiv2023&#xff09;&#xff0c;高效图像重建等任务GRL&#xff08;CVPR2023&#xff09;&#xff0c;轻量视觉Transformer中的局部信息思考CloFormer&#xff08;arX…