【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?

简介: 【数据结构】连通图、连通分量与强连通图、强连通分量—区别在于强,强强在哪里?

前言


对连通图的理解

在图论中,连通图基于连通的概念。


在一个 无向图G 中,若从顶点 i 到顶点 j 有路径相连(当然从j到i也一定有路径),则称i和j是连通的。


如果 G 是有向图,那么连接 i 和 j 的路径中所有的边都必须同向。如果图中任意两点都是连通的,那么图被称作连通图。如果此图是有向图,则称为强连通图(注意:需要双向都有路径)。图连通性的是图的基本性质。


一、什么是连通图?


连通:在无向图中,若从顶点u到顶点v有路径,则称u和v是连通的。


图中从⼀个顶点到达另⼀顶点,若存在⾄少⼀条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是 V1-V2-V3 和 V1-V4-V3,因此称 V1 和 V3 之间是连通的。


ba98d8d86a794a83a99840ff68c06a47.png


d3f1d09c29884f04bc8293bcbba4a553.png


 二、什么是连通分量?


若⽆向图不是连通图,但图中存储某个⼦图符合连通图的性质,则称该⼦图为连通分量。

由图中部分顶点和边构成的图为该图的⼀个⼦图,但这⾥的⼦图指的是图中"最⼤"的连通⼦图(也称"极⼤连通⼦图")。


若无向图为非连通图,则图中各个极大连通子图称为此图的连通分量。


2.1 、那什么是极大连通子图呢?联想到的极小连通子图又是什么呢?


1. 首先先明确两个概念,无向图和有向图;其次,明确一个概念极大连通子图,可以存在于无向图中,也可以存在于有向图中;


2. 但要知道,极小连通子图只存在于连通的无向图中,不存在于不连通的无向图和有向图中。


也就是说,极大连通子图和极小连通子图适用条件是不一样的,尽管它们看起来貌似很接近。

无向图中的极大连通子图


无向图中的极大连通子图也叫连通分量。


无向图可以分成两种类型:连通的无向图、不连通的无向图。


连通的无向图只有一个极大连通子图,即它本身,因为不存在另一个连通的子图包含的点和边比它本身还要多,所以叫作极大连通子图。

不 连通的无向图可以拆分为若干个连通的无向图,如果我们在拆分时注意把能连通的点边都放在一个连通子图中,使这个连通子图足够大,以至于再多包含一个点或边它就变成不连通的了,我们称这个连通子图为极大连通子图,也叫连通分量。

极小连通子图


极小连通子图只存在于连通的无向图中,也就是说该图中只有一个连通分量(极大连通子图),之所以说它极小,是因为极小连通子图只要求包含图中所有顶点及其比顶点数量少一个的边(且不能成环),也就是说如果给极小连通子图任意两个顶点间加入一条边,则必有环。


这里的极大和极小不是指一个意思,不要弄混了,极大连通子图是讨论连通分量的,极小连通子图是讨论生成树的。


下面举几个图例,让大家看看,深入了解一下连通分量:


如图 3 所⽰,虽然图 a 中的⽆向图不是连通图,但可以将其分解为 3 个"最⼤⼦图"(图 b ),它们都满⾜连通图的性质,因此都是连通分量。

308ca801f0274ece8b8d8f4de206f8e6.png

26b1c310823647a3a227aed70219968c.png

4806ca7c0ff641f88f17d11a10167140.png


6d225e7cbafa432e870abaf873895ff4.png


b94407f83ea740ddbeb01fdde643a871.png


477a98668adc49c6ad8bf0fc52032c45.png


看了这么多图例,你学会了吗?能在图中找出连通分量了吗?


需要注意的是,连通分量的提出是以"整个⽆向图不是连通图"为前提的,因为如果⽆向图是连通图,则其⽆法分解出多个最⼤连通⼦图,因为图中所有的顶点之间都是连通的。


三、强连通图


1.  如果一个有向图G,对于其中任意两个顶点v,u,都存在从v到u以及从u到v的有向路径,则称G为强连通图。而在一个不是强连通图的有向图G中,若其中两个顶点u、v在两个方向上都存在有向路径,则称u和v强连通。


2.  强连通图:在有向图中,若任意两个顶点 均连通(一条有向路径),则称该图是强连通图。


3.  有向图中,若任意两个顶点 Vi 和 Vj,满⾜从 Vi 到 Vj 以及从 Vj 到 Vi 都连通,也就是都含有⾄少⼀条通路,则称此有向图为强连通图。如图 4 所⽰就是⼀个强连通图。


93a09bd066f843ad96669d7c8157413a.png

45946e194bd14b9ea8532e9ef881e05a.png


45946e194bd14b9ea8532e9ef881e05a.png


四、强连通分量


1. 在有向图中,如果从任意一个顶点出发,都能通过图中的边到达图中的每一个顶点,则称之为强连通图。一张有向图的顶点数 极大的强连通子图 称为强连通分量。


2. 而有向图G的极大强连通子图S,即添加任意顶点都会导致S失去强连通的属性,则称S为G的强连通分量。


3. 强连通分量:有向图中的极大强连通子图。强连通图只有一个强连通分量,即其本身。


4. 与此同时,若有向图本⾝不是强连通图,但其包含的 最⼤连通⼦图具有强连通图的性质,则称该⼦图为强连通分量。整个有向图虽不是强连通图,但其含有两个强连通分量。


730cd825e0764830a1612696b103ca66.png

3097d9186e6e4ebc99bccee4d4fc87cb.png

54e3108d393f4560ba41e32578b359f7.png


”强强“在那里—连通图和强连通图的区别?


需求不同:强连通图说的是有向图,连通图说的是无向图。连通图只存在于无向图中,而强连通图通常存在于有向图中。

概念不同:

在一幅无向图中,任何两个顶点之间可以相通,则该图就是连通图。

在一幅有向图中,任意两对顶点都可以相通,那么该图就是强连通图。

可以这样说,连通图是在⽆向图 的基础上对图中顶点之间的连通做了更⾼的要求,⽽强连通图是在有向图 的基础上对图中顶点的连通做了更⾼的要求。


相关文章
|
6月前
|
存储 缓存 算法
堆和栈的概念和区别
堆和栈的概念和区别
57 1
|
6月前
|
存储 JavaScript 前端开发
什么是堆?什么是栈?他们之间从区别和联系
什么是堆?什么是栈?他们之间从区别和联系
304 0
|
6月前
|
存储 程序员 编译器
|
6月前
|
存储 安全 Java
【数据结构】栈的使用|模拟实现|应用|栈与虚拟机栈和栈帧的区别
【数据结构】栈的使用|模拟实现|应用|栈与虚拟机栈和栈帧的区别
61 0
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
35 1
|
2月前
|
存储 程序员 C语言
堆和栈之间有什么区别
【9月更文挑战第1天】堆和栈之间有什么区别
659 0
|
3月前
|
存储
全局变量和局部变量在堆和栈的区别
全局变量和局部变量在堆和栈的区别
393 0
|
4月前
|
存储 缓存 算法
堆和栈的区别及应用场景
堆和栈的区别及应用场景
|
4月前
|
存储 缓存 算法
堆和栈的区别及应用场景
堆和栈的区别及应用场景
|
5月前
|
存储 人工智能 程序员
技术心得记录:堆(heap)与栈(stack)的区别
技术心得记录:堆(heap)与栈(stack)的区别
40 0