【深度优先搜索遍历算法的实现,广度优先遍历(BFS-Breadth_First Search),构造最小生成树】

news/2023/11/30 9:15:42

文章目录

  • 深度优先搜索遍历算法的实现
    • 邻接矩阵表示的无向图深度遍历实现:
    • DFS算法分析
  • 广度优先遍历(BFS-Breadth_First Search)
  • 构造最小生成树

深度优先搜索遍历算法的实现

邻接矩阵表示的无向图深度遍历实现:

在这里插入图片描述
实现深度优先遍历的关键在于回溯。就是自后往前,追溯曾将走过的路径。
算法的特点:

  • 深度优先算法是一个递归的过程。
    • 首先,选定一个出发点后再进行遍历,如果有邻接的未被访问过的结点则继续前进。
    • 若不能继续前进,则回退一步再前进。
    • 若回退一步仍不能继续前进,则连续回退至可以前进的位置为止。
    • 重复此过程,直到所有与选定点相通的所有顶点都被遍历。
    • 若重复此过程,直到所有与选定点相通的顶点都被遍历。
  • 深度优先搜索是递归过程,带有回退操作,因此需要使用栈存储访问的路径信息。当访问到的当前顶点没有可以前进的邻接结点的时候,需要进行出栈操作,将当前位置回退到栈元素的位置。

DFS算法分析

用邻接矩阵来表示图,遍历图中每一个顶点都要从头扫描该顶点所在行,时间复杂度为O(n的平方)。
用邻接表来表示图,虽然有2e个表结点,但只需e个结点即可完成遍历,加上访问
个头结点的时间,时间复杂度为O(n+e)。
结论:
稠密图适于在邻接矩阵上进行深度遍历;
稀疏图适于在邻接表上进行深度遍历。
非连通图的遍历
在这里插入图片描述

广度优先遍历(BFS-Breadth_First Search)

方法:从图的某一结点出发,首先依次访问该结点的所有邻接结点Vi1,Vi2,…,Vin再按这些顶点被访问的先后次序依次访问与他们相邻接的所有未被访问过的顶点。
重复此过程,直至所有顶点均被访问完为止。
例:在这里插入图片描述
利用队列来实现
在这里插入图片描述
概念回顾----生成树
生成树:所有顶点均由边连接在一起,但不存在回路的图。

  • 一个图可以有许多棵不同的生成树

在这里插入图片描述- 所有生成树具有以下共同特点:
- 生成树的顶点个数与图的顶点个数相同;
- 生成树是图的极小连通子图,去掉一条边则非联通;
- 一个有n个顶点的连通图的生成树有n-1条边;
- 在生成树中再加一条边必然形成回路。
- 生成树中任意两个顶点间的路径是唯一的。

  • 含有n个顶点,n-1条边的图不一定是生成图。
    在这里插入图片描述

构造最小生成树

构造最小生成树的算法很多,其中多数算法都利用了MST的性质。
MST性质:设N=(V,E)是一个连通网,U是顶点集V的一个非空子集。若边(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵树包含边(u,v)的最小生成树。
在这里插入图片描述
最小生成树:给定一个无向网络,在该网的所有生成树中,使得各边权值之和最小的那棵树称为该网的最小生成树,也叫做最小代价生成树。
在这里插入图片描述


https://www.xjx100.cn/news/3092712.html

相关文章

hook io异常注入

文中code https://gitee.com/bbjg001/darcy_common/tree/master/io_hook 需求引入 最近工作需要,需要验证一下我们的服务在硬盘故障下的鲁棒性。 从同事大佬哪里了解到hook技术,可以通过LD_PRELOAD这个环境变量拦截依赖库的调用链,将对标准…

OSG文字-各种文字效果(边框、阴影及颜色倾斜)示例(2)

各种文字效果(边框、阴影及颜色倾斜)示例 各种文字效果(边框、阴影及颜色倾斜)示例的代码如程序清单9-2所示&#xff1a; 1. /* 各种文字效果(边框、阴影及颜色倾斜)示例 */ 2. osg::ref_ptr<osg::Camera> createAllKindText(const string &strDataFolder) 3. {…

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

黑盒子测试

黑盒子测试的步骤包括&#xff1a; 测试计划&#xff1a;根据用户需求报告中关于功能要求和性能指标的规格说明书&#xff0c;定义相应的测试需求报告&#xff0c;制订黑盒测试的最高标准。同时适当选择测试内容&#xff0c;合理安排测试人员、测试时间及测试资源等。测试设计…

Linux 安全 - 扩展属性xattr

文章目录 前言一、简介二、扩展属性命名空间2.1 简介2.2 security扩展属性2.3 System扩展属性2.4 Trusted扩展属性2.5 User扩展属性 三、用户空间使用3.1 setfattr/getfattr3.2 setxattr/getxattr/listxattr 参考资料 前言 一、简介 xattr - Extended attributes扩展属性是与…

数字化转型导师坚鹏:数字化时代银行网点厅堂营销5大特点分析

数字化时代银行网点厅堂营销存在以下5大特点&#xff1a; 1、产品多样化&#xff1a;在数字化时代&#xff0c;银行的产品和服务变得更加多样化。除了传统的存款、贷款、理财等金融服务外&#xff0c;还新增了各种创新产品&#xff0c;如网上银行、移动支付、投资咨询、保险、…

Docker 安装 Oracle Database 23c

目录 访问 Oracle 官方网站 使用 Docker 运行 Oracle Database 23c 免费容器映像 创建并运行 Oracle Database 23c 容器 查看已下载的镜像 列出正在运行的容器 进入容器 sqlplus 命令 访问 Oracle 官方网站 Database Software Downloads | Oracle 中国 使用 Docker 运行…

nvm切换node后,没有npm

当我们想要在不同的 Node.js 版本之间切换的时候&#xff0c;通常会使用 nvm&#xff08;Node Version Manager&#xff09; 来完成。但是&#xff0c;当我们在使用 nvm 切换 Node.js 版本的时候&#xff0c;可能会遇到没有 npm 的情况。这种情况通常发生在我们在新环境或者重新…