图、邻接矩阵、广度与深度优先、生成树

news2024/9/19 10:48:21

最近突然被问到这个问题,于是复习一下,用最通俗的语言解释。

无向图:如下左图各个顶点之间用不带箭头的边连接的图;相应的右图就是有向图

               

 邻接矩阵

可以理解为表示上述图中顶点与顶点之间是否有直接相连的边(有则是1,无则是0),描述这种关系的二维数组。如下两幅图中的二维矩阵:

 

 易知,每个图都可以用对应的邻接矩阵表示出来。其中图1邻接矩阵是非对称的,图2中的邻接矩阵却是对称的(沿主对角线)。

 广度搜索优先遍历

无论广度/深度搜索,均遵循原则:按顺序入队且先入的先出,直到所有的顶点均出完就结束搜索。

结合例子我们先说广度搜索,我理解为同级别的顶点按顺序先遍历完再搜索下一级别的顶点,这样一级一级往下,直到底。

如上面的图G1,以A为顶点广度搜索:

深度搜索优先遍历

 深度搜索优先我理解为一颗倒拔过来的杨柳树,一根枝条摸完摸到底再摸下一根枝条。为了好理解可以每次只入队1个顶点,当一根枝条达到底部时就返回上一级(上上一级、上上上级.......)看是否有为入队过的枝条。如上图的G1以A为顶点深度搜索优先就应该是:

由上面两幅图,很容易理解广度与深度优先,那么G2图的广度、深度优先也容易,即如下:

   

即广度顺序是A->B->C->E->F->D->G 而深度顺序是A->B->C->E->D->F->G 

那么对于图4这种不是图而是用邻接矩阵表示顶点间关系的我们该怎么搜索呢?其实是一样道理,如图4的广度搜索应如下:

即D答案错了一个顺序。继续看另几个答案A应该是0243165,所以A也不正确,即绿框所示0423165即答案C正确。

生成树

理解了上面说的广度、深度优先,我们可以像上面一样计算得到相应的搜索顺序,然后我们根据顺序去画广度优先生成树、深度优先生成树。以图4中的邻接矩阵为例,广度优先搜索生成树就是如下所示,入队的顶点是出队的顶点的下一级,用边连接即可画出:

 我们再看图3,图3是不对称的邻接矩阵,意味着有的点是单向连接、有的是双向,而且看得出这个邻接矩阵顶点很多,画图反而有点乱,我们不必画图结构,而是直接跟图4一样使用邻接矩阵直接得到顺序与生成树。

参考:

数据结构——无向图创建邻接表以及深度遍历、广度遍历(C语言版)_正弦定理的博客-CSDN博客_无向图的邻接表的广度遍历

数据结构—无向图创建邻接矩阵、深度优先遍历和广度优先遍历(C语言版)_正弦定理的博客-CSDN博客_邻接矩阵广度优先遍历c语言

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

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

相关文章

定时任务组件Quartz

1 定时任务组件Quartz 1.1 Quartz介绍 Quartz是Job scheduling(作业调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务,…

计算机网络第四章 网络层数据平面

4.0 目录[TOC]4.1 概述作用:主机到主机之间传输TCP segment或UDP datagram将段封装成IP datagram以及解封装IP datagram【在网络边缘和路由器上都要进行】A.两大功能:转发路由转发:从不同的端口接收数据,再通过合适的端口发送出去…

WPS表格:函数公式

文章目录1. ROW()、ROWS(array)1)ROW()2)ROWS(array)2. COUNT(参数)、COUNTA(参数)、COUNTIF(参数)1)COUNT()2)COUNTA()3)COUNTIF()3. VLOOKUP(参数)、LOOKUP(参数)1)VLOOKUP(参数)2)LOOKUP(向量…

数据分析有发展前景吗?,零基础能学得会吗?

数据分析这门专业是近几年因大数据的出现而产生的新兴职业,分为大数据分析和数据分析师,区别在于大数据分析师要求更高,不仅需要数据分析的基本能力,还要具备编程能力、机器学习技能,以及本身所接触到处理的都是海量数…

webpack打包构建工具的使用和相关的配置

目录 一、 webpack的基础使用步骤 二、webpack的配置 1、入口和出口 2、 webpack打包后自动生成html文件并自动引入打包后的js 3、加载器loader 3.1、处理css文件 3.2、处理less文件 3.3、处理图片文件 3.4、处理字体文字 3.5、处理高版本js语法(降级&#xff…

Linux locate命令

Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。一般情况我们只需要输入 locate your_file_name 即可查找指定文件。语法locate [-d ][--help][--version][范本样式...]参数&#xff1a…

Notepad++ 代码格式化插件工具

因为notepad的NppAStyle插件只支持格式化C、C、C#、Java这四种编程语言的代码,所以推荐使用这个CoolFormat的插件,相比于NPPAStyle,CoolFormat支持C\C\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具。还可以作为V…

后端java模拟前端RSA.js加密登录爬虫

项目开发过程中,经常会遇到数据爬取需求,但是对于某些网站,由于前端加密,导致数据爬取不容易。比如某网站,前端使用RSA.js加密,并且后端返回对应的公钥的指数和模数,通过后端返回的指数和模数对…

电商如何打开数字化的破局之路

电商网购已经成为我们的日常生活,在如此高节奏的工作下,打开手机或者电脑从网上挑选自己需要的物品,方便快捷,伴随着移动互联网和月的高速发展,电子商务作为现今的产业在我国快速增长和兴起。 如今的电商模式多种多样&…

Elasticsearch7.8.0版本入门——JavaAPI操作(批量操作文档)

目录一、pom文件依赖二、批量操作文档 代码示例2.1、批量创建文档 代码示例2.2、批量删除文档 代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch…

网络分层:OSI模型与TCP/IP模型

前言 这部分个人还是觉得有点难&#xff0c;之前也看过类似的文章&#xff0c;还是没有理解&#xff0c;更多的是概念掌握 OSI模型&#xff1a;Open System Interconnection 这是一个概念模型&#xff0c;存在于理论上&#xff0c;而没有真正实现。需要参考这样的模型&#x…

可以绕过 Windows UAC 吗

目录 一、引言 二、使用 COM 提升名称方法绕过 UAC 2.1 什么样的 COM 组件支持自动提权 2.2 如何以提升名称方法创建 COM 组件对象 2.3 有了权限提升的 COM 组件对象后&#xff0c;怎么为我们所用呢 2.4 使用 rundll32.exe 执行 COM 提升名称代码 2.4.1 rundll32.exe 简…

Qt使用QTextEdit来批量添加数据到数据库中

1.首先要了解QTextEdit的遍历方式 在下面的文章中已经介绍&#xff0c;这里就不在介绍了&#xff1a; 富文本处理&#xff08;QTextEdit&#xff09;_旷工锁的博客-CSDN博客_qtextedit 富文本 基本步骤为&#xff1a; 创建一个QTextEdit使用QTextDocument来获取QTextEdit中的…

IronPDF 2023.1 for Java Crack

关于 IronPDF for Java 在 Java 8、Kotlin 和 Scala 项目中创建、编辑和提取 PDF 内容。 IronPDF for Java&#xff08;作为 IronPDF for .NET 的一部分提供&#xff09;是一个 Java PDF 库&#xff0c;专为在 Windows、Linux 或云平台上运行的 Java 8、Kotlin 和 Scala 而设计…

2023-01-29 学习笔记:常见28种数据分析模型

2023-01-29 学习笔记&#xff1a;常见28种数据分析模型 知乎上的一篇文章&#xff0c;虽然之前对深度学习相关模型有所了解&#xff0c;但通过这篇文章了解了更多模型的应用场景&#xff0c;同时也知道了日常一共有多少种实用模型。 Excel/Python/sql/PowerBI/Pyecharts这些只是…

YOLOV3中卷积层,池化层,yolo层理解

前言&#xff1a;YOLOV3学习笔记&#xff0c;记录对卷积层&#xff0c;池化层&#xff0c;yolo层的理解&#xff0c;阐述深度学习中卷积核&#xff0c;通道数相关名词的含义。yolov3-tiny网络如下&#xff1a;卷积层0层为卷积层&#xff0c;其中filters16&#xff0c;表示的卷积…

css如何给div添加一个条纹背景,在背景上画一条有宽度的斜线

如图&#xff0c;想要实现div的背景上有一条深色的斜线。 这里主要使用的是css里的线性渐变属性。 先看一下网上示例及效果&#xff1a; 示例一 <body><div class"patterns pt1"></div><div class"patterns pt2"></div>…

Python - 实现logging根据日志级别输出不同颜色

文章目录一、完整代码二、代码解释三、附&#xff1a;自定义颜色对应代码前段时间因为工作需要脚本打印不同颜色的日志。查找了网上的一些方法&#xff0c;大部分都需要再安装第三方模块。后来选择采用比较简易的办法&#xff0c;类似于print()函数自定义内容颜色这种方式的缺陷…

抽烟行为监测识别系统 yolov5

抽烟行为监测识别系统通过pythonyolov5网络深度学习技术&#xff0c;对画面中人员抽烟行为进行主动识别检测。在介绍Yolo算法之前&#xff0c;首先先介绍一下滑动窗口技术&#xff0c;这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单&#xff0c;它将…

C# AForge的简单使用

AForge.NET专为计算机视觉和人工智能应用而设计&#xff0c;这种C#框架适用于图像处理、神经网络、遗传算法、模糊逻辑、机器学习和机器人等。 该库是一个开源项目&#xff0c;包括&#xff1a; AForge.Imaging —— 一些日常的图像处理和过滤器 AForge.Vision —— 计算机视…