数据结构之<图>的介绍

图(Graph)的概念:
在数据结构中,图是由节点(顶点)和边组成的非线性数据结构。图用于表示不同对象之间的关系,其中节点表示对象,边表示对象之间的连接或关系。

1.图的基本组成元素:

  1. 节点(Vertex 或 Node): 表示图中的实体或对象。节点可以有不同的属性和值。在某些情况下,节点也被称为顶点。

  2. 边(Edge): 表示连接节点的关系。边可以是有向的(有方向性)或无向的(无方向性),也可以有权重或权值(表示边的成本、距离或其他度量)。

2.图的分类:

2.1.有向图(Directed Graph):

在这里插入图片描述

有向图是一种图,其中边有方向。也就是说,从一个节点到另一个节点的边具有明确的起点和终点。有向图中的边可以是单向的,也可以是双向的。

2.2.无向图(Undirected Graph):

在这里插入图片描述
无向图是一种图,其中边没有方向。也就是说,从一个节点到另一个节点的边没有明确的起点和终点。无向图中的边是双向的,表示节点之间的对等关系。

2.3.连通图(Connected Graph):

在这里插入图片描述
连通图是指图中任意两个节点之间都存在路径的图。也就是说,从图中的任意一个节点出发,都可以到达图中的其他所有节点。

2.4.非连通图(Disconnected Graph):

在这里插入图片描述
非连通图是指图中存在孤立的节点或者多个不相连的子图。也就是说,从某个节点出发,无法到达图中的其他某些节点。

2.5.加权图(Weighted Graph):

在这里插入图片描述
加权图是一种图,其中每条边都有一个权重或者值。这些权重可以表示节点之间的距离、成本、容量等。加权图用于解决一些需要考虑边的权重的问题,如最短路径问题、最小生成树问题等。

3.图的表示方式:

  1. 邻接矩阵(Adjacency Matrix): 用二维数组表示节点之间的连接关系。矩阵的行和列表示节点,矩阵元素表示节点之间是否存在边或边的权重。

  2. 邻接表(Adjacency List): 用链表、数组或字典等数据结构表示图中的节点及其相邻节点。每个节点记录其相邻节点的信息。

4.图的常见操作和算法:

  • 遍历(Traversal): 深度优先搜索(DFS)和广度优先搜索(BFS)是常用的图遍历算法,用于访问和搜索图中的节点和边。

  • 最短路径算法(Shortest Path Algorithms): 例如 Dijkstra 算法和 Bellman-Ford 算法,用于找到图中两个节点之间的最短路径。

  • 最小生成树算法(Minimum Spanning Tree Algorithms): 如 Prim 算法和 Kruskal 算法,用于找到连接图中所有节点的最小成本树形结构。

  • 拓扑排序(Topological Sorting): 用于有向无环图(DAG)中节点的线性排序,使得图中任何一对顶点u和v,若边(u, v)存在,则u排在v的前面。

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

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

相关文章

人生感悟 | 当前经济形势,给25~35岁的年轻人一点建议

哈喽,你好啊,我是雷工! 这两年经济情况怎么样呢?相信大家都有自己的感觉。 且不说网上看到的“裁员裁到大动脉”“设计院欠薪”等各种新闻。 说自己和家人的亲身经历吧,这两年经历了被拖欠工资、公司缩编、换工作、公…

从源码分析 Spring 基于注解的事务

在spring引入基于注解的事务(Transactional)之前&#xff0c;我们一般都是如下这样进行拦截事务的配置&#xff1a; <!-- 拦截器方式配置事务 --><tx:advice id"transactionAdvice" transaction-manager"transactionManager"><tx:attribute…

Vue中插槽的使用

目录 一、默认插槽 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;代码展示 &#xff08;3&#xff09;后备内容 二、具名插槽 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;代码展示 三、作用域插槽 &#xff08;1&#xff09;概念 &#xff0…

Spring-整合MyBatis

依赖 <dependencies><!--提供数据源--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency><!--提供sqlSessionFactory…

虚拟化之成本

虚拟化的成本取决于在 hypervisor 需要为虚拟机&#xff08;VM&#xff09;提供服务时&#xff0c;在虚拟机和 hypervisor 之间切换所需的时间。在 Arm 系统上&#xff0c;这样的成本的下限包括&#xff1a; 31 个 64 位通用寄存器&#xff08;X0 到 X30&#xff09;32 个 128…

一个 tomcat 下如何部署多个项目?附详细步骤

一个tomcat下如何部署多个项目&#xff1f;Linux跟windows系统下的步骤都差不多&#xff0c;以下linux系统下部署为例。windows系统下部署同理。 1 不修改端口&#xff0c;部署多个项目 清楚tomcat目录结构的应该都知道&#xff0c;项目包是放在webapps目录下的&#xff0c;那…

vue2 echarts不同角色多个类型数据的柱状图

前端代码&#xff1a; 先按照echarts插件。在页面里引用 import * as echarts from "echarts";设置div <div style"width:100%;height:250px;margin-top: 4px;" id"addressChart"></div>方法: addressEcharts() {const option {g…

RabbitMQ搭建集群环境、配置镜像集群、负载均衡

RabbitMQ集群搭建 Linux安装RabbitMQ下载安装基本操作命令开启管理界面及配置 RabbitMQ集群搭建确定rabbitmq安装目录启动第一个节点启动第二个节点停止命令创建集群查看集群集群管理 RabbitMQ镜像集群配置启用HA策略创建一个镜像队列测试镜像队列 负载均衡-HAProxy安装HAProxy…

【精选】计算机网络教程(第3章数据链路层)

目录 前言 第3章数据链路层 1、差错检测&#xff08;CRC&#xff09; 2、点对点协议&#xff08;了解应用场景&#xff09; 3、什么是碰撞域&#xff0c;什么是广播域 碰撞域&#xff08;Collision Domain&#xff09;&#xff1a; 广播域&#xff08;Broadcast Domain&a…

利用二叉树遍历的思想编写一个判断二叉树是否是平衡二叉树的算法

题目描述&#xff1a;利用二叉树遍历的思想编写一个判断二叉树是否是平衡二叉树的算法。 分析&#xff1a; 设置二叉树的平衡标记为balance&#xff0c;若 balance 为 1&#xff0c;则是平衡二叉树&#xff0c;若为0&#xff0c;则不是。 void Judge_AVL(BiTree T,int &b…

计算机组成原理学习(输入输出系统)

目录 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算机的结构 二.常见的&#xff08;I/O设备或者是外部设备&#xff09; ​ 三.主机如何与I/O设备进行交互 四.I/O控制方式简介 五.I/O系统的基本组成 输入输出系统&#xff08;i/o系统&#xff09; 一.现代计算…

PTA——L1-026 I Love GPLT

这道超级简单的题目没有任何输入。 你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了。 所谓“竖着输出”&#xff0c;是指每个字符占一行&#xff08;包括空格&#xff09;&#xff0c;即每行只能有1个字符和回车。 输入样例&#xff1a; 无输出样例&#…

Java stream流实现List<对象>通过对象中的多个字段去重

遇到同时通过多个字段对list进行去重需求&#xff0c;记录一下 先创建一个实体类 Data public class User {private Long id;private String name;private String code;private String phone;private Integer age;public User(Long id, String name, String code, String phon…

android studio简易app实例

以下是一个使用Android Studio创建的简易App实例。这个App包括一个主页面&#xff0c;一个关于页面和一个设置页面。 步骤1&#xff1a;创建新的Android项目 打开Android Studio&#xff0c;点击"File" -> "New" -> "New Project"。在新…

一键安装下载3ds Max!别墅还是宫殿?3ds Max助你建造梦幻般的艺术建筑

不再浪费时间在网上寻找3ds Max的安装包了&#xff01;因为你所需要的一切都可以在这里找到&#xff01;作为一款全球领先的3D设计工具&#xff0c;3ds Max为创作者们带来了前所未有的便利和创作灵感。无论是建筑设计、影视特效还是游戏开发&#xff0c;3ds Max都能帮助你实现想…

C++——C++11(1)

时至今日&#xff0c;C标准已经到了C23&#xff0c;但是你要说哪一次提出的标准最经 典&#xff0c;那C11一定会被人提及&#xff0c;C11带来了数量可观的变化&#xff0c;其中包 含了约140个新特性&#xff0c;以及对C03标准中约600个缺陷的修正&#xff0c;这使得 C11更像是从…

一个神奇的Python库:Evidently,机器学习必备

Evidently 是一个面向数据科学家和机器学习工程师的开源 Python 库。它有助于评估、测试和监控从验证到生产的数据和 ML 模型。它适用于表格、文本数据和嵌入。 简介 Evidently 是一个开源的 Python 工具&#xff0c;旨在帮助构建对机器学习模型的监控&#xff0c;以确保它们的…

博客动态校验+静态校验二次开发方式

静态校验&#xff1a; 1&#xff1a;将需要静态校验的参数继承BaseReqeust类重写validate方法&#xff1a; 动态校验&#xff1a; 1&#xff1a;在需要校验的实现类上加&#xff1a; BizValidate注解 2&#xff1a;写一个校验类&#xff0c;方法命名规范为&#xff1a;需要校…

修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)

现象&#xff1a; 这个问题是直接指向了我使用的第三方库good-storage&#xff0c;这是一个对localStorage/sessionStorage做了简单封装的库&#xff0c;因为项目代码有一个缓存cache.ts有用到 原因分析&#xff1a; 从表象上看是storage对象找不到getItem方法&#xff0c; 但…

快速定位网页中元素在源代码中的位置

快速定位网页中元素在源代码中的位置参考本文