有趣的图(二)(56)

news/2024/7/20 20:27:53 标签: 算法, 深度优先

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

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

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

今日主题

咱们书接上回,上次学了图的基本概念,你都学会了吗?

咱们今天要学习内容如下:

图的遍历算法

深度优先遍历算法dfs

这些很基础,也很常用哦

图的遍历算法

计算机中图的遍历是指,从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。

比如,从某个顶点如何遍历图中所有的顶点?

深度优先遍历算法dfs

深度优先遍历(Depth-First Search,DFS)是一种用于遍历或搜索图或树的算法

它的基本思想是从图中的某个顶点开始,沿着一条路径一直走到不能再走为止,然后回溯到前一个顶点,继续走另一条路径,直到遍历完整个图或树。

在计算机中,图的深度优先遍历算法通常使用递归实现。

具体步骤如下:

  1. 选定一个起始顶点,并将其标记为已访问。

  2. 从该顶点开始,依次访问其所有未被访问过的相邻顶点。如果某个相邻顶点未被访问过,则递归地对它进行深度优先遍历。

  3. 如果当前相邻顶点已被访问过,则停止递归,并回溯到前一个顶点。

  4. 重复步骤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行:将其邻接顶点添加到列表中,循环逐一访问

你学会了吗?

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

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

我是猫妹,咱们下次见!


http://www.niftyadmin.cn/n/425371.html

相关文章

给软件测试人的一封信,全网最佳“指路明灯“

一、一招鲜吃遍天下 你需要有一个核心技能。这个技能至少达到远超你的同事(包括开发岗位的同事的)平均水平。最好达到业界领先水平,且这个核心技能需要不断打磨提高。比如,我选择的核心技能是使用Python写代码。这个核心技能可以…

Mysql8.0常用命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、登录二、查看端口三、修改端口四、重启Mysql五、创建新用户六、修改密码七、给指定用户分配权限八、删除用户九、远程链接 访问权限 安装参考的:添加…

oracle~cpu飙高处理方法(2)

1. 用途: 当数据库服务器负载高时,资源绝大部分的可能是被正在运行的SQL所消耗,查询到正在执行的SQL语句,是打开高消耗原因的第一步。该语句重点关注的是正在执行的SQL语句、等待事件、发起程序、发起主机及SQL代码,并…

Colyseus 常见错误

报错原因解决errno: -4058 spawn git ENOENT找不到Git命令安装Git/配置Git路径XXX has been blocked by CORS policyhttp请求试图调用https资源/本地试图访问网络资源/Arena上传代码后没有部署/在已连接服务器的情况下重复连接/服务器地址写错统一使用https/配置跨域访问政策文…

Linux基础知识点1

Linux概述 Linux的特点: 多用户多任务、开源、安全、稳定 Linux系统的开发模型: 集市模型 Linux的版本: 内核版本和发行版本 内核版本和发行版本含义或区别? 答: 内核版本:Linux 操作系统的内核程序版…

postgres 简单导入导出sql脚本

postgres 简单导入导出sql脚本 导出 backup选择类型 导入功能 导出 backup 选择类型 右键点击backup: 成功导出sql 数据文件 导入功能 cd 进入 Postgres 安装目录进入bin目录下执行一下命令 psql -d ${database_name} -h localhost -p 5432 -U postgres -f C:\…

Vue过滤器基本使用

1、app.vue 使用methods实现&#xff1a; <template><div>{{ uppercase(message) }}<h3><h3 :x"mySlice(msg)">Title</h3></h3></div> </template><script> export default {data() {return {message: "…

java面试之SQL优化、运行时异常

说说你了解的sql优化有哪些 以下是一些SQL优化技巧&#xff1a; 索引优化&#xff1a;对于查询频繁的列建立索引&#xff0c;可以大幅度提高查询效率。但同时也要避免过多的索引或者不必要的复合索引&#xff0c;因为它们会增加写操作的开销。 查询条件优化&#xff1a;避免…