图(Graph)的定义

news/2025/1/11 11:54:04/

图(Graph)的定义

文章目录

  • 图(Graph)的定义
    • ●图的形式化定义:G = (V,E)
    • ●无向图和有向图的表示形式:
    • ● 有向图和无向图的定义
    • ●抽象数据类型定义ADT

●图形结构属于复杂的非线性结构

● 图由顶点的集合和边的集合构成

●图的形式化定义:G = (V,E)

image-20221224133216443

• 集合V(vertex):顶点的有限集合,记为V(G)

​ ▪ 对于n个顶点的图,对每个顶点连续编号,即顶点的编号为0 ~ n-1

​ ▪ 通过编号唯一确定一个顶点

• 集合E(Edge):连接V中两个不同顶点(顶点对)的边的有限集合,记为E(G).

●无向图和有向图的表示形式:

①无向图,如图所示

image-20221224133648773

②有向图,区别就是括号变成尖括号,左右两个顶点分别表示起点和终点.

image-20221224133703117

● 有向图和无向图的定义

​ ♥ 无向图

​ • 边之间的"顶点对"是无序的,则称图G为无向图.

​ • (i,j)表示一条无向边,和(j,i)是同一条边。

​ ♥ 有向图

​ • 边之间的顶点对是有序的,则称G为有向图

​ • <i,j>∈E(G)表示由i到j方向有一条边

image-20221224134316890

●抽象数据类型定义ADT

ADT Tree
{
数据对象:
D={ai|aiElemType, i=1,2,3…,n,n>=0} //ElemType为类型标识符

​ 数据关系:

​ R = {<ai,aj>ai,aj∈D, i=1,2,…,n,j=1,2,…,n,其中每个元素可以有零个或多个前驱节点,可以有零个或多个后继节点}

​ 数据关系:

​ (1)初始化图InitGraph(&g):构造一个空的图g

​ (2)销毁图ClearGrapth(&g):释放图g所占用的空间

​ (3) DFS(G,V):从顶点v出发,深度优先遍历图g

​ (4) BFS(G,V):从顶点v出发,广度优先遍历图g

​ …

}

思考:其实图所对应的顶点和边的关系, 也是对应了数据结构里面数据对象和数据关系.


http://www.ppmy.cn/news/6221.html

相关文章

【网络安全】浅识 SQL 注入

前言 SQL 注入&#xff08;SQL Injection&#xff09;是发生在 Web 程序中数据库层的安全漏洞&#xff0c;是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理&#xff0c;导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外…

我写这10+个JavaScript单行代码,被组长夸代码写得优雅!

大厂面试题分享 面试题库 前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 JavaScript 非常大的特点容易上手且非常灵活&#xff0c;代码实现方式五花八门&#xff1b;有时候能一行代码解决&#xff0c;就尽量不用…

C# Winform 三层架构

一、介绍 三层架构是 C# 桌面开发中比较常用的框架&#xff0c;是由 表示层&#xff08;UI&#xff09;、业务逻辑层&#xff08;BLL&#xff09;和数据访问层&#xff08;DAL&#xff09;三层架构组成&#xff0c;目的是为了 “高内聚&#xff0c;低耦合”。开发人员分工更明…

【并发】深入理解JMM并发三大特性(一)

【并发】深入理解JMM&并发三大特性&#xff08;一&#xff09; 今天是2022.11.16&#xff0c;在此之前我已经学习完了图灵课堂MySQL的课程&#xff0c;也是想这篇文章一样用CSDN博客的形式来记录这些知识点。 在并发中&#xff0c;JMM在大多数人眼中&#xff0c;它是整个…

java中的反射

反射 类加载的过程 当程序主动使用某个类时&#xff0c;如果该类还未被加载到内存中&#xff0c;则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外&#xff0c;JVM将会连续完成3个步骤&#xff0c;所以有时也把这个3个步骤统称为类加载或类初始化。加载 …

从 2022 年优秀 Linux 发行版中挑选你喜欢的版本

导读如果你想从 2022 年最佳 Linux 发行版列表中挑选一个最喜欢的版本&#xff0c;那么今天你需要考虑以下几个选项。 2022 年是充满惊喜的一年&#xff0c;Linux 发行版的表现也不例外。从充满功能的新版本到各种桌面选项&#xff0c;总有一些值得期待的东西。 如果你想从 20…

Promise对象的使用

一、什么是Promise Promise 是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;回调函数和事件&#xff09;更合理和更强大。从语法上说&#xff0c;Promise 是一个对象&#xff0c;从它可以获取异步操作的消息。Promise 提供统一的 API&#xff0c;各种异步操…

让人恶心的多线程代码,性能怎么优化?

Java 中最烦人的&#xff0c;就是多线程&#xff0c;一不小心&#xff0c;代码写的比单线程还慢&#xff0c;这就让人非常尴尬。 通常情况下&#xff0c;我们会使用 ThreadLocal 实现线程封闭&#xff0c;比如避免 SimpleDateFormat 在并发环境下所引起的一些不一致情况。其实…