算法 || DFS(深度优先搜索) BFS(广度优先搜索)

news2025/6/19 13:06:54

1、基本概念

dfs全称为Depth First Search,即深度优先搜索。它的思想是沿着每一条可能的路径一个节点一个节点地往下搜索,搜到了路径的到终点再回溯,一直到所有路径搜索完为止。

bfsbfs全称为Breath First Search,即广度(宽度)优先搜索。它的思想是将每一层的结搜素完成后在搜索下一层,一直到最后一层搜完为止。

2、搜索与遍历

通过遍历所有的可能情况,达到搜索的目的。

树的深度优先遍历和图的深度优先遍历

树的深度优先遍历已经很熟悉了,前中后序遍历,用递归或者栈都可以。

图的深度优先遍历
在这里插入图片描述

3、图的深度优先遍历基础

基本概念

图的定义

图(Graph)是由非空的顶点集合和一个描述顶点之间关系——边(或者弧)的集合组成,其形式化定义如下:

G=(V,E)
V={vi|vi∈dataObject}
E={(vi,vj)|vi,vj∈V∧P(vi,vj)}

其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合,集合E中P(vi,vj)表示顶点vi和顶点vj之间有一条直接连线,即偶对(vi,vj)表示一条边。
在这里插入图片描述

在这里插入图片描述
图G中:V(G)={v1,v2,v3,v4,v5}
E(G)={(v1,v2), (v1,v4), (v2,v3), (v2,v5),(v3,v4), (v3,v5), (v4,v5)}

在线性表中,元素个数可以为零,称为空表;
在树中,结点个数可以为零,称为空树;
在图中,顶点个数不能为零,但可以没有边。

顶点的度

依附于该顶点的边数,通常记为TD(v)。

顶点的入度
在有向图中,顶点v的入度是指以该顶点为弧头的弧的数目,记为ID(v);

顶点的出度
在有向图中,顶点v的出度是指以该顶点为弧尾的弧的数目,记为OD(v)。

弧、弧头、弧尾
有向图的边称为弧。无向图叫做边。有序偶对<v,w>表示有向图从v到w的一条弧,v称为弧尾或始点,w称为弧头或终点

在这里插入图片描述<x,y>表示从节点x到节点y

邻接矩阵

在这里插入图片描述如图:说明v1指向v2, v3,但是并不指向v1,v4

邻接表(用得多)

在这里插入图片描述邻接表有两种结点结构:顶点表结点和边表结点。
1、无向图:
在这里插入图片描述在这里插入图片描述从图中我们知道,顶点表的各个结点由data和 firstedge两个域表示,data是数据域,存储顶点的信息,firstedge是指针域,指向边表的第一个结点,即此顶点的第-一个邻接点。边表结点由adjvex 和 next两个域组成。adjvex是邻接点域,存储某顶点的邻接点在顶点表中的下标(是下标!!!),next则存储指向边表中下一个结点的指针。比如v顶点与vo、vz互为邻接点,则在v1的边表中,adjvex 分别为vo的0和v的2。

2、有向图
邻接表结构是类似的,比如图7-4-7中第一幅图的邻接表就是第二幅图。但要注意的是有向图由于有方向,我们是以顶点为弧尾来存储边表的,这样很容易就可以得到每个顶点的出度。但也有时为了便于确定顶点的入度或以顶点为弧头的弧,我们可以建立一个有向图的逆邻接表,即对每个顶点v都建立一个链接为v为弧头的表。如图7-4-7的第三幅图所示。
在这里插入图片描述在这里插入图片描述

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

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

相关文章

【SQL】数据库的创建,表的创建、更新、删除

本文内容参考书籍《SQL基础教程》&#xff0c;初学者&#xff0c;请多指教。 一、数据库的创建 1、创建数据库语句 CREATE DATABASE <数据库名称>; 2、示例 CREATE DATABAST shop&#xff1b; 二、表的创建 创建表之前&#xff0c;必须先创建用于存储表的数据库。 1、…

如何找出消耗CPU最多的线程?

如何找出消耗CPU最多的线程&#xff1f; 1.使用 top -c 找出所有当前进程的运行列表 top -c 2.按P(Shiftp)对所有进程按CPU使用率进行排序&#xff0c;找出消耗最高的线程PID ​​​ 显示Java进程 PID 为 136 的java进程消耗最 3.使用 top -Hp PID&#xff0c;查出里面消…

JavaEE简单示例——基于XML配置文件的SSM整合

SSM整合 在本节中&#xff0c;我们会将之前我们学习过的三个框架结合起来&#xff0c;让他们可以融合起来&#xff0c;搭建成一个完整的贯穿整个三层架构的整体框架。 三层框架与对应的框架功能 我们首先回顾一下我们编写软件的三层框架以及对应使用的框架都分别是什么&…

代码随想录算法训练营第五十九天| 503. 下一个更大元素 II、42. 接雨水。

503. 下一个更大元素 II 题目链接&#xff1a;力扣 题目要求&#xff1a; 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。数字 x 的 下一个更大的元素 是按数组遍历顺…

( “树” 之 DFS) 110. 平衡二叉树 ——【Leetcode每日一题】

110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] …

智慧钢铁厂人员定位系统解决方案,助力钢铁企业提升安全生产管理水平

作为国民经济的基础原材料产业&#xff0c;钢铁工业在经济发展中具有重要地位。中国钢铁工业不仅为我国国民经济的快速发展做出了重大贡献&#xff0c;也为世界经济的繁荣和世界钢铁工业的发展起到了积极的促进作用&#xff0c;但钢铁行业在快速发展的同时也存在一些安全管理问…

React应用(基于React脚手架)

目录前言&#xff1a;一、使用create-react-app创建react应用1、什么是 react 脚手架&#xff1f;2. 创建 cli 脚手架方式13. 创建 cli 脚手架方式24. npx:5. react脚手架项目结构6. 功能界面的组件化编码流程&#xff08;通用&#xff09;7. 如何更改脚手架版本二、React 组件…

【SpringMVC】7—文件上传

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

【深入理解SSD 实践】对NVMe SSD热插拔时,正确做法是怎样的?

声明 主页&#xff1a;元存储的博客_CSDN博客 依公开知识及经验整理&#xff0c;如有误请留言。 个人辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 内容摘要 前言 概念 SAS/SATA 和NVMe 区别 热插拔分类 热插拔基本原理 如何确认是否支持热插拔&#xff1f; 热插…

Python批量导出阿里云ECS和Redis实例的监控数据到Excel

背景 某公司使用阿里云的 ECS 和 Redis 服务作为其业务支撑&#xff0c;为了及时了解机器的使用情况&#xff0c;领导要求业务部门对所有阿里云机器的平均资源使用率进行统计&#xff0c;并汇总在一个 Excel 表格中&#xff0c;以便领导查看和分析。 需求 为了满足领导的需求…

C++ const的作用

1.const在C中是只读变量&#xff0c;在C中表示常量 以下代码&#xff0c;在C中是错误的&#xff0c;但是在C中是正确的。 void main() {const int n 10;int arr [n]; }2.const不仅可以定义一个常量&#xff0c;也可以定义函数参数 例如&#xff1a; char *strcpy(char *dest…

一次弄懂gzip模块启用和配置指令

接下来所学习的指令都来自ngx_http_gzip_module模块&#xff0c;该模块会在nginx安装的时候内置到nginx的安装环境中&#xff0c;也就是说我们可以直接使用这些指令。 1. gzip指令&#xff1a;该指令用于开启或者关闭gzip功能 注意只有该指令为打开状态&#xff0c;下面的指令才…

联想凌拓 ThinkSystem DE 系列全闪存阵列

ThinkSystem DE 系列全闪存阵列 超高的性能&#xff0c;极具竞争力的价格 通过消除过量配置最大限度地提高效率&#xff0c;同时通过降低空间、电源和冷却要求来降低成本。 利用高级数据保护&#xff0c;在本地或从远距离上防止数据丢失和停机事件。 在模块化 2U 构建模块中…

ModStartBlog v7.1.0 ChatGPT支持,界面全新优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 …

【ChatGPT】ChatGPT-5 强到什么地步?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 ChatGPT-5 强到什么地步&#xff1f; 技术 深度学习模型的升级 更好的预测能力 自适应学习能力 特点 语言理解能力更强 自我修正和优化 更广泛的应用领域 应用 对话系统 智能写作…

2.含电热联合系统的微电网运行优化(文章复现)

说明书 相关代码资源&#xff1a;基于多目标粒子群算法冷热电联供综合能源系统运行优化 基于拉丁超立方法的风光场景生成与削减 粒子群综合能源系统优化的matlab实现 智能微电网PSO优化算法 MATLAB代码&#xff1a;含电热联合系统的微电网运行优化 关键词&#xff1a;微网…

基于PINN的极少监督数据二维非定常圆柱绕流模拟

2022年10月16日-19日&#xff0c;亚洲计算流体力学会议在韩国九州举办。会议涌现了不少结合人工智能技术进行流体力学模拟的论文成果&#xff0c;这说明人工智能技术逐渐渗透流体力学模拟领域。百度与西安交通大学的研究人员一起&#xff0c;利用飞桨框架和科学计算工具组件Pad…

生成式人工智能所面临的问题有哪些?

在生成式人工智能中工作需要混合技术、创造性和协作技能。通过发展这些技能&#xff0c;您将能够在这个令人兴奋且快速发展的领域应对具有挑战性的问题。 生成式人工智能是指一类机器学习技术&#xff0c;旨在生成与训练数据相似但不完全相同的新数据。 换句话说&#xff0c;…

WPS C++ 二次开发 Demo运行

1.官网二次开发地址&#xff1a;https://open.wps.cn/docs/client/wpsLoad 2.Demo源码下载&#xff1a; 经过测试上述链接找不到demo源码&#xff0c;可通过git命令下载&#xff1a; git clone https://code.aliyun.com/zouyingfeng/wps.git -b dev 图中cpp文件夹即为cdemo源码…

<Linux>进程概念

文章目录一、什么是进程1.进程概念2.进程描述 – PCB3.task_struct内容分类二、进程的基本操作1.查看进程2.结束进程3.通过系统调用获取进程标示符4.通过系统调用创建子进程(fork)三、进程状态1.普遍的操作系统状态2.Linux操作系统状态四、两种特殊的进程1.僵尸进程2.孤儿进程五…