有趣的图(二)(56)
小朋友们好,大朋友们好!
我是猫妹,一名爱上Python编程的小学生。
和猫妹学Python,一起趣味学编程。
今日主题
咱们书接上回,上次学了图的基本概念,你都学会了吗?
咱们今天要学习内容如下:
图的遍历算法
深度优先遍历算法dfs
这些很基础,也很常用哦
图的遍历算法
计算机中图的遍历是指,从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。
比如,从某个顶点如何遍历图中所有的顶点?

深度优先遍历算法dfs
深度优先遍历(Depth-First Search,DFS)是一种用于遍历或搜索图或树的算法。
它的基本思想是从图中的某个顶点开始,沿着一条路径一直走到不能再走为止,然后回溯到前一个顶点,继续走另一条路径,直到遍历完整个图或树。
在计算机中,图的深度优先遍历算法通常使用递归实现。

具体步骤如下:
-
选定一个起始顶点,并将其标记为已访问。
-
从该顶点开始,依次访问其所有未被访问过的相邻顶点。如果某个相邻顶点未被访问过,则递归地对它进行深度优先遍历。
-
如果当前相邻顶点已被访问过,则停止递归,并回溯到前一个顶点。
-
重复步骤2和3,直到所有与起始顶点相连的顶点都被访问过。
递归实现深度优先遍历算法dfs
以上图为例:

12行,dfs为遍历深度优先函数名称和参数,其中的G表示要遍历的图,v表示遍历起始顶点,visited表示已经访问过的顶点。
13行,已经访问过的顶点,打印下。
14行,将访问过的顶点存放到集合中。
15行~17行,依次访问v的邻接顶点,如果该顶点没有被访问过,则访问它。

迭代实现深度优先遍历算法dfs
以上图为例:

这里用到了列表的pop方法和extend(iterable)方法,实现栈的回溯法。
pop(index) 或 pop()
弹出并返回所指定索引的元素。
传入参数:索引值 index,可不传。
返回:指定索引的元素,未指定索引则返回末尾元素

extend(iterable):将一个可迭代对象的所有元素,添加到列表末尾。
传入参数:可迭代对象 iterable。
返回:None。
12行:如果列表非空
13行:创建一个集合,存放已访问过顶点
14行:起始顶点
16行:将顶点从列表中弹出,如果未访问,访问
19行:添加到访问集合
20行:将其邻接顶点添加到列表中,循环逐一访问


你学会了吗?

好了,我们今天就学到这里吧!
如果遇到什么问题,咱们多多交流,共同解决。
我是猫妹,咱们下次见!
相关文章:
有趣的图(二)(56)
小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 咱们书接上回,上次学了图的基本概念,你都学会了吗? 咱们今天要学习内容如下&a…...
Linux之环境变量
目录 Linux之环境变量 分类 环境变量 定义 设置环境变量 设置环境变量(永久) 用户环境变量配置所在文件: 全局环境变量配置所在文件: 显示与取消环境变量 通过echo或printf打印环境变量 通过env或set显示默认的环境变量 用 …...
python带你制作自动点赞小程序,让我看看谁还在呆呆的手动点赞
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 知识点: 动态数据抓包 requests发送请求 开发环境: 代码所使用软件工具: python 3.8 >>>>>> 运行代码 pycharm 2022.3 >>>>>> 辅助敲代码 需下载的第三方模块&a…...
shell脚本编写辅助命令
目录 一、echo 命令 二、字符串相关操作 1.截取字符串 2.获取字符串长度 3.字符串追加字符 4.从开头或结尾删除字符串指定格式内容 三、随机数 1.使用 $RANDOM 2.指定RANDOM变量的范围 (1)从0开始的范围 (2)从指定数始…...
高并发编程:线程池
一、概述 线程池首先有几个接口先了解第一个是Executor,第二个是ExecutorService,在后面才是线程池的一个使用ThreadPoolExecutor。 二、Executor Executor看它的名字也能理解,执行者,所以他有一个方法叫执行,那么执…...
微信小程序开发uni-app-8分钟上手开发
本篇文章uni-app微信小程序开发-8分钟上手开发 -首先到微信小程序官网登录/注册微信小程序 微信小程序官网 uni-app 微信小程序 注册微信小程序 这里要注意: 激活邮箱之后,选择主体类型为 “个人类型”,并按要求登记主体信息。主体信息提…...
【C++11】 initializer_list | 右值引用 | 移动构造 | 完美转发
文章目录 1. 统一的列表初始化{ } 初始化initializer_list 2. 引用左值引用右值引用左值引用与右值引用的相互转换右值引用的真正使用场景移动构造 C98与C11传值返回问题注意事项总结 3. 完美转发 1. 统一的列表初始化 { } 初始化 C11 扩大了括号括起的列表(初始化列表)的使用…...
基于html+css的图展示122
准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...
《Unix环境高级编程》/bin/sh: ./fixup.awk: Permission denied
我的代码是从http://www.apuebook.com/code3e.html下载的,先是在 使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6,使用uname -r看到内核是3.10.0-957.el7.x86_64。 在代码顶级目录下,执行make。 发现报错: ./fi…...
万字长文+示例代码详解DDD中常用的架构(含代码示例)
目录 分层架构(Layered Architecture) 概念 示例代码 总结 领域驱动设计的六边形架构(Hexagonal Architecture) 概念 示例代码 总结 CQRS(Command Query Responsibility Segregation) 概念 示例…...
Debezium UI On ECS编译安装及开放Web访问
1. 访问debezium-ui的代码仓库,下载源码 GitHub - debezium/debezium-ui: A web UI for Debezium; Please log issues at https://issues.redhat.com/browse/DBZ. 2. 解压zip源码包: TEST[hadoopshdcvfsla1894 ~]$ cd /data/module TEST[hadoopshd…...
【支付系统】核心支付流程
支付在产品中常见的用处为购买和充值.这两种功能操作大相径庭,其中购买相对充值多了很多步骤,它需要锁商品或者库存,还需要超时未支付取消订单等操作.在这篇文章中主要探讨支付部分,属于购买和充值公共部分. 下面是绘制的简易支付时序图 以上时序图并非完整,其实核心步骤就是, …...
电脑系统可以直接备份到其它硬盘上吗
在日常使用电脑的过程中,我们都希望能够保护好重要的系统数据,以防止意外数据丢失或系统崩溃。那么,能否将电脑系统直接备份到其他硬盘上呢?本文将为您解答这个问题,并探讨备份系统的方法和注意事项。 工具/原料&…...
springboot项目如何优雅停机
文章目录 前言kill -9 pid的危害如何优雅的停机理论步骤优雅方式1、kill -15 pid 命令停机2、ApplicationContext close停机3、actuator shutdown 停机4、ApplicationListener 监听延时停机 前言 相信很多同学都会用Kill -9 PID来杀死进程,如果用在我们微服务项目里…...
springboot mybatis-plus 代码生成工具
介绍 基于mybatis-plus代码生成工具 后续会不断完善 规划 后续会基于此功能搞低代码平台,会有前端VUE mybatis-plus介绍&特性 • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 • 损耗小࿱…...
超全、超详细的Redis学习笔记总结
❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...
Day05 04-MySQL分库分表介绍
文章目录 第十七章 MySQL分库分表17.1 什么是分库分表17.2 为什么要分库分表17.3 垂直切分17.3.1 垂直分库17.3.2 垂直分表 17.4 水平切分17.4.1 水平分库17.4.2 水平分表17.4.3 常见的水平切分规则 第十七章 MySQL分库分表 17.1 什么是分库分表 MySQL数据库常见的优化方案中…...
基于SpringBoot+vue的毕业生信息招聘平台设计和实现
博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…...
git一定要学会,加油
gitgit文档http://file:///F:/%E8%B5%84%E6%96%99%E5%A4%8D%E4%B9%A0/Git%E4%BC%98%E7%A7%80%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Git%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Pro%20Git%E4%B8%AD%E6%96%87PDF%E7%89%88.pdf init 初始化仓库 这个命令在当前目录下初始化一个 G…...
TVM面试题
1、TVM中的调度器(Scheduler)是什么?请简要解释TVM调度器的作用和工作原理。 TVM中的调度器(Scheduler)是负责将计算图映射到特定硬件目标上的组件。调度器在TVM中起着关键的作用,它决定了计算图的执行方式、并行化策略以及内存布局等,以优化…...
算法将驱动一切:边缘AI智能体如何重塑智能系统
仓库装卸区的安全摄像头每天采集86400秒的视频数据。长途卡车上的车队远程信息记录仪在两次加油之间积累了数GB的行车影像。外科手术机器人的立体摄像头以每秒60帧的速度生成密集点云。所有这些数据都产生于数字世界与现实世界的交界处,但几乎没有任何一条被用于智能…...
PixelAnnotationTool:破解语义分割标注效率瓶颈的智能解决方案
PixelAnnotationTool:破解语义分割标注效率瓶颈的智能解决方案 【免费下载链接】PixelAnnotationTool Annotate quickly images. 项目地址: https://gitcode.com/gh_mirrors/pi/PixelAnnotationTool 在计算机视觉领域,高质量的语义分割数据标注是…...
Midjourney咖啡印相为何总偏灰?揭秘RGB→Lab→咖啡染料光谱响应的3层色彩断层及校正算法
更多请点击: https://intelliparadigm.com 第一章:Midjourney咖啡印相为何总偏灰?揭秘RGB→Lab→咖啡染料光谱响应的3层色彩断层及校正算法 咖啡印相(Coffee Cyanotype)作为一种新兴的生物友好型物理输出工艺…...
技术生态依赖的实质与破局:从Android到自主可控的实践路径
1. 项目背景与核心议题解析最近在整理行业资料时,翻到一篇2013年的旧文,讨论的是当时中国工信部对国内移动产业过度依赖Android系统的担忧。虽然时过境迁,但文中提到的“技术自主可控”与“全球生态融入”之间的张力,在今天看来依…...
从零构建大模型推理引擎:KV缓存、算子融合与量化优化实战
1. 项目概述:从零理解大模型推理引擎如果你正在关注大语言模型(LLM)的实际应用,特别是如何让这些动辄数百亿参数的“庞然大物”在你的本地机器或服务器上高效地跑起来,那么你很可能已经听说过“推理引擎”这个词。anik…...
开源物联网平台SiteWhere:微服务架构下的设备管理与数据流实战
1. 项目概述:一个开源的物联网应用平台如果你正在寻找一个能帮你快速搭建、管理和扩展物联网应用的核心平台,而不是从零开始造轮子,那么SiteWhere这个开源项目绝对值得你花时间深入了解。它不是一个简单的设备连接网关,而是一个功…...
Taotoken提供的审计日志功能如何满足企业级安全与合规需求
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken提供的审计日志功能如何满足企业级安全与合规需求 1. 企业引入大模型能力后的审计挑战 当企业将大模型API能力整合到内部…...
Unity3D游戏马赛克清除终极指南:7种高效技术深度解析
Unity3D游戏马赛克清除终极指南:7种高效技术深度解析 【免费下载链接】UniversalUnityDemosaics A collection of universal demosaic BepInEx plugins for games made in Unity3D engine 项目地址: https://gitcode.com/gh_mirrors/un/UniversalUnityDemosaics …...
别再复制粘贴了!手把手教你用MATLAB/Simulink把低通滤波器写成C代码(附差分方程推导避坑点)
从MATLAB到嵌入式C:工业级低通滤波器实现全解析 在电机控制、信号处理等嵌入式应用中,低通滤波器的实现质量直接影响系统性能。许多工程师习惯直接复制现成代码,却常遭遇数值不稳定、相位失真或计算效率低下等问题。本文将彻底拆解从S域传递函…...
PCIe均衡参数测量实战:从8GT/s到32GT/s,示波器上的电压怎么量?
PCIe均衡参数测量实战:从8GT/s到32GT/s的示波器操作指南 在高速串行通信领域,PCIe接口的均衡参数测量是确保信号完整性的关键环节。随着数据传输速率从8GT/s跃升至32GT/s,工程师面临的测量挑战也呈指数级增长。本文将深入探讨如何利用示波器准…...
