图(Java语言实现)
一、图的概念
顶点(Vertex):图中的数据元素,我们称之为顶点,图至少有一个顶点(非空有穷集合)。
边(Edge):顶点之间的关系用边表示。
1.图(Graph)
图 G 由顶点集 V 和边集 E 组成,记为 G = ( V , E ) G = (V, E) G=(V,E) ,其中V(G)表示图G中顶点的有限非空集; E ( G ) E(G) E(G) 表示图 G 中顶点之间的关系(边)集合。若 V = { v 1 , v 2 , … , v n } V = \{ v_1 , v_2 , … , v_n \} V={v1,v2,…,vn},则用 ∣ V ∣ | V | ∣V∣ 表示图 G 中顶点的个数,也称图G的阶(Order), E = { ( u , v ) ∣ u ∈ V , v ∈ V } E = \{ (u, v) | u \in V, v \in V \} E={(u,v)∣u∈V,v∈V},用 ∣ E ∣ | E | ∣E∣表示图 G 中边的条数
注意:线性表可以是空表,树可以是空树,但图不可以是空,即V一定是非空集

上图所示为一张图(Graph),元素A、B、C、D、E、F分别为图的顶点(Vertex),两个元素之间的关系(连线)成为图的边(Edge)。
上面的图可以表示为:
G = ( V , E ) G = (V , E ) G=(V,E)
V = { A , B , C , D , E , F } V = \{A, B, C, D, E, F\} V={A,B,C,D,E,F}
E = { ( A , B ) , ( A , C ) , ( A , D ) , ( B , E ) , ( B , F ) , ( C , E ) , ( D , F ) } E =\{ (A, B), (A, C), (A, D), (B, E), (B, F), (C, E), (D, F) \} E={(A,B),(A,C),(A,D),(B,E),(B,F),(C,E),(D,F)}
图的阶数 ∣ V ∣ = 6 | V |=6 ∣V∣=6
图的边的条数 ∣ E ∣ = 7 | E |=7 ∣E∣=7。
2.无向图(Undirected Graph)与有向图(Directed Graph)
(1)无向图(Undirected Graph)
若 E 是无向边(简称边)的有限集合时,则图 G 为无向图。边是顶点的无序时,记为 ( v , w ) (v, w) (v,w) 或 ( w , v ) (w, v) (w,v) ,因为 ( v , w ) = ( w , v ) (v, w) = (w, v) (v,w)=(w,v) ,其中v、w是顶点。可以说顶点 w 和顶点 v 互为邻接点。边 $(v, w) $依附于顶点 w 和 v ,或者说边 ( v , w ) (v, w) (v,w) 和顶点 v 、w 相关联。
简单来说,边没有方向的图就是无向图。

上图可表示为:
G u = ( V u , E u ) G_u = (V_u , E_u ) Gu=(Vu,Eu)
V u = { A , B , C , D , E } V_u = \{A, B, C, D, E\} Vu={A,B,C,D,E}
E u = { ( A , B ) , ( B , D ) , ( B , E ) , ( C , D ) , ( C , E ) , ( D , E ) } E_u = \{(A, B), (B, D), (B, E), (C, D), (C, E), (D, E)\} Eu={(A,B),(B,D),(B,E),(C,D),(C,E),(D,E)}
(2)有向图(Directed Graph)
若 E 是有向边(也称弧(Arcs))的有限集合时,则图 G 为有向图。弧是顶点的有序对,记为 < v , w > <v, w> <v,w> ,其中 v 、 w 是顶点, v 称为弧尾, w 称为弧头, < v , w > <v, w> <v,w> 称为从顶点v到顶点w的弧,也称v邻接到 w ,或 w 邻接自 v 。 < v , w > ≠ < w , v > <v, w> ≠ <w, v> <v,w>=<w,v>
简单来说,边有方向的图就是有向图。

上图可表示为:
G d = ( V d , E d ) G_d = (V_d , E_d ) Gd=(Vd,Ed)
V d = { A , B , C , D , E } V_d = \{A, B, C, D, E\} Vd={A,B,C,D,E}
E d = { < A , B > , < A , C > , < A , D > , < A , E > , < B , A > , < B , C > , < B , E > , < C , D > } E_d = \{<A, B>, <A, C>, <A, D>, <A, E>, <B, A>, <B, C>, <B, E>, <C, D>\} Ed={<A,B>,<A,C>,<A,D>,<A,E>,<B,A>,<B,C>,<B,E>,<C,D>}
3. 简单图(Simple Graph)与多重图(Multi Graph)
(1)简单图(Simple Graph)
不存在重复边并且不存在顶点到自身的边的图称为简单图

(2)多重图(Multi Graph)
允许两个结点之间的边数多于一条,又允许顶点通过同一条边和自己关联的图多重图。

4. 顶点的度(Degree)
度(Degree):顶点v的度是指依附于该顶点的边的条数,记为TD(v)。
入度(Indegree):入度是有向图中以顶点 v 为终点的有向边的数目,记为ID(v);
出度(Outdegree):出度是有向图中以顶点 v 为起点的有向边的数目,记为OD(v)。
在有向图中,顶点 v 的度等于其入度和出度之和,即
T D ( v ) = I D ( v ) + O D ( v ) TD(v) = ID(v) + OD(v) TD(v)=ID(v)+OD(v)。
度在有向图和无向图中都存在,而入度和出度只存在于无向图中。
5. 描述顶点关系的几个概念
-
路径(path):顶点 vp 到顶点 vq 之间的一条路径是指顶点序列 { v p , v i 1 , v i 2 , . . . , v i m − 1 , v i m , v q } \{v_p, v_{i1}, v_{i2},... ,v_{im-1},v_{im},v_q\} {vp,vi1,vi2,...,vim−1,vim,vq}。
-
回路(circuit):第一个顶点和最后一个顶点相同的路径称为回路或环。
-
简单路径(Simple Path):在路径序列中,顶点不重复出现的路径称为简单路径。
-
简单回路(Simple Circuith):除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路或环(Cycle)。
-
路径长度(Path Length):路径上边的数目。
-
点到点的距离(Distance):从顶点 u 出发到顶点v的最短路径若存在,则此路径的长度称为从 u 到 v 的距离。若从 u 到 v 根本不存在路径,则记该距离为无穷(∞)。
-
连通(connected):无向图中,若从顶点 v 到顶点 w 有路径存在,则称 v 和 w 是连通的
-
强连通(Strongly Connected):有向图中,若从顶点 v 到顶点 w 和从顶点 w 到顶点 v 之间都有路径,则称这两个顶点是强连通。
-
弱连通(Weakly Connected):若一张有向图的边替换为无向边后,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则称原来这张有向图是弱连通。
6.连通图(Connected Graph)与强连通图(Strongly Connected Graph)
连通图(Connected Graph):若图 G 中任意两个顶点都是连通的,则称图 G 为连通图,否则称为非连通图。
强连通图(Strongly Connected Graph):若有向图中任何一对顶点都是强连通的,则称此图为强连通图。
弱连通图(Weakly Connected Graph):将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。
7. 子图(SubGraph)与生成子图(Spanning SubGraph)
设有两个图 G = ( V , E ) G = (V, E) G=(V,E) 和 G ′ = ( V ′ , E ′ ) G' = (V', E') G′=(V′,E′),若 V ′ V' V′是 V V V 的子集,且 E ′ E' E′是 E E E 的子集,则称 G ′ G' G′ 是 G G G 的子图。
若有满足 V ( G ′ ) = V ( G ) V(G') = V(G) V(G′)=V(G)的子图 G ′ G' G′,则称其为 G 的生成子图。

8. 连通分量(Connected Component)
连通分量(Connected Component):无向图中的极大连通子图称为连通分量。
强连通分量(Strongly Connected Component):有向图中极大强连通子图称为强连通分量。
弱连通分量(Weakly Connected Component):将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。一个有向图的基图的极大连通子图称为弱连通分量。


8.生成树(Spanning Tree)和生成森林(Spanning Forest)
如果连通图的一个子图是一棵包含的所有顶点的树,则该子图称为G的生成树(SpanningTree)。

生成树的结果不是唯一的,如图展示的是一张连通图的两个生成树。
生成森林:在非连通图中,连通分量的生成树构成了非连通图的生成森林(Spanning Forest)。

如图展示的是一张非连通图的生成森林。
9.边的权值(Weight)
- 边的权(Weight):在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值。
- 带权图(Weighted Graph):边上带有权值的图称为带权图,也称网(NetWork)。
- 带权路径长度(Weighted Path Length):当图是带权图时,一条路径上所有边的权值之和,称为该路径的带权路径长度
二、图的存储
1.邻接矩阵存储
2.邻接表存储
3.十字链表存储(存储有向图)
4.邻接多重表存储(存储无向图)
相关文章:
图(Java语言实现)
一、图的概念 顶点(Vertex):图中的数据元素,我们称之为顶点,图至少有一个顶点(非空有穷集合)。 边(Edge):顶点之间的关系用边表示。 1.图(Graph…...
GPT 生成绘画_Java语言例子_超详细
基于spring ai :简化Java AI开发,提升效率与维护性 过去在使用Java编写AI应用时,主要困境在于缺乏统一的标准化封装,开发者需要针对不同的AI服务提供商查阅各自独立的文档并进行接口对接,这不仅增加了开发的工作量&am…...
华为OD机试 - 小朋友分组最少调整次数 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...
数字农业与遥感监测平台
随着全球人口的增长和气候变化的挑战,农业的可持续发展变得尤为重要。数字农业作为现代农业发展的重要方向,正逐渐成为提高农业生产效率、保障粮食安全的关键手段。遥感技术作为数字农业的重要组成部分,通过监测作物生长状况、土壤湿度、病虫…...
2023年12月中国电子学会青少年软件编程(Python)等级考试试卷(一级)答案 + 解析
一、单选题 1、下列程序运行的结果是?( ) print(hello) print(world) A.helloworld B.hello world C.hello world D.helloworld 正确答案:B 答案解析:本题考察的 Python 编程基础,print 在打印时…...
【优选算法】——双指针(下篇)!
🌈个人主页:秋风起,再归来~ 🔥系列专栏:C刷题算法总结 🔖克心守己,律己则安 目录 1、有效三角形的个数 2、查找总价值为目标值的两个商品 3、三数之和 4、四数之和 5、完结散花 1、有…...
C#中函数重载的说明
一.函数重载的基本概念 C# 中的函数重载是指在同一个类中定义多个同名的函数,但这些函数的参数类型、参数个数、参数顺序等不同,以便适应不同的调用需求,增加代码的兼容性。 二.函数重载的作用 2.1定义多个相类似的函数,减少函…...
图论day56|广度优先搜索理论基础 、bfs与dfs的对比(思维导图)、 99.岛屿数量(卡码网)、100.岛屿的最大面积(卡码网)
图论day56|广度优先搜索理论基础 、bfs与dfs的对比(思维导图)、 99.岛屿数量(卡码网)、100.岛屿的最大面积(卡码网)) 广度优先搜索理论基础bfs与dfs的对比(思维导图)&…...
源码编译方式安装htppd软件
一.源码编译安装httpd软件 1.安装阿帕奇的依赖,安装apr软件,阿帕奇正常运行的环境这个环境就是apr。 2.安装apr-util软件,主要提供针对apr环境的管理工具, 3.安装阿帕奇软件即httpd软件。 如上图所示,就是三个软件的…...
MES制造执行系统原型图动端 Axure原型 交互设计 Axure实战项目
MES制造执行系统原型移动端 Manufacturing Execution System prototype MES制造执行系统原型图移动端是专门为制造执行系统设计的移动端是一个可视化的设计。用于展示和演示该系统在移动设备上的功能和界面。通过原型图,可以清晰地了解制造执行系统在移动端的各个…...
flutter 仿淘宝推荐二级分类效果
先看效果 一开始 用的PageView 做的, 然后重写PageScrollPhysics一顿魔改, 最后发现还是有一些小bug。 后面又想到pageview 能做,listview肯定也能做,最后用ListView加GridView 把功能实现了。 listview 实现pageview 的分页滑动…...
报错 - LangChain AgentExecutor - ‘function‘ object has no attribute ‘get‘
使用 AgentExecutor 调用了使用两个 tool 的agent,报一下错误: 如果 agent 只使用 一个tool,没有报错 File "/Users/xx/miniconda3/envs/env1/lib/python3.11/site-packages/pydantic/_internal/_validators.py", line 44, in sequ…...
【DIY小记】通过降低电压和Process Lasso工具优化CPU超频表现
又到了创作纪念日,秉承着笔耕不辍的理念,笔者还是继续分享一下DIY日常。 在上一篇文章当中,笔者介绍了一些作为新手小白超频CPU和NVIDIA显卡的经验。今天又有了更新,笔者通过降低CPU工作电压,并且结合Process Lasso对…...
3、Docker搭建MQTT及Spring Boot 3.x集成MQTT
一、前言 本篇主要是围绕着两个点,1、Docker 搭建单机版本 MQTT(EMQX),2、Spring Boot 3.x 集成 MQTT(EMQX); 而且这里的 MQTT(EMQX)的搭建也只是一个简单的过程&#x…...
六种定时任务记录
1、java自带的Timer Timer是java中自带的类。 优点:使用简单,缺点是当添加并执行多个任务时,前面任务的执行用时和异常将影响到后面任务。 Timer timer new Timer();timer.schedule(new TimerTask() {int i 0;Overridepublic void run() …...
Dos下编译环境搭建和C运行程序生成
文章目录 前言一、需要准备的Tool二、搭建步骤 前言 因为工作需要,需要搭建个Dos下的编译环境来进行Code App开发,如下记录下搭建过程。 一、需要准备的Tool 编译环境:Win10/win11 编译工具: DOSBox0.74 Turboc2.7z 二、搭建步骤 1.双击压…...
【MySQL】入门篇—SQL基础:数据查询语言(DQL):复杂的SELECT语句
在实际应用中,复杂的SELECT语句可以帮助我们从多个表中提取相关信息,进行数据分析,生成报告,甚至进行数据挖掘。 掌握复杂的SELECT语句对于数据分析师、数据库管理员和开发者来说是必不可少的技能。 应用场景: 多表查…...
Appium环境搭建、Appium连接真机
文章目录 一、安装Android SDK二、安装Appium-desktop三、安装Appium Inspector 一、安装Android SDK 首先需要安装jdk,这里就不演示安装jdk的过程了 SDK下载地址:Android SDK 下载 1、点击 Android SDK 下载 -> SKD Tools 2、选择对应的版本进行下…...
【X线源】关于滨松MCS2软件的说明
【X线源】关于滨松MCS2软件的说明 1.软件背景2.MCS2界面3.MCS2操作4.常见问题 1.软件背景 滨松为了方便客户将滨松MFX集成进自己的系统,滨松提供了MFX二次开发相关的信息和Demo代码。参考博客说明: 【X线源】关于滨松MFX二次开发demo示例简介 https://…...
【深度学习代码调试2】环境配置篇(中) -- 列出conda环境中所有env的pytorch版本
【深度学习代码调试2】环境配置篇(中) -- 列出conda环境中所有env的pytorch版本 写在最前面如何检查所有 Conda 环境中的 PyTorch 版本(并重点提示 PyTorch 1.7.1 版本)1. 列出所有 Conda 环境2. 检查每个环境中的 PyTorch 版本方…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
