大家好,很高兴又和大家见面啦!!!
在上一篇中,我们初步认识了图的定义与分类。今天,我们将深入探讨图的核心概念:
• 顶点的度(无向图与有向图的入度、出度)
• 路径与回路(简单路径、简单回路、路径长度的计算)
• 距离与连通性(连通图、强连通图的判断)
• 子图与连通分量(生成子图、极大连通子图)
通过生活化示例与图解,助你轻松掌握图的基础逻辑。让我们开始吧!
在无向图中,顶点v的度是指依附于顶点v的边的条数,记为 T D ( v ) TD(v) TD(v)。
在有向图中,顶点v的度分为入度和出度:
在有向图中,全部顶点的入度和与出度和相等,并且等于边数,这是因为每条有向边都有一个顶点和一个终点。
路径:是两个顶点之间的所有顶点组成的顶点序列
在上图中,因为该图为无向图,所以顶点B到顶点E的路径有两条:
而在有向图中,路径的方向应与弧的方向保持一致:
例如上图中,B到E的路径只有一条: B , C , D , E B, C, D, E B,C,D,E
这是因为B和A之间存在弧 < B , A > <B,A> ,但是在A和E之间并不存在弧 < A , E > <A,E> ,这就说明顶点A并没有邻接到顶点E,因此我们无法从顶点A直接到顶点E。
这就好比生活中的自来水厂供水,我们平时用的自来水都是自来水厂通过自来水管道向我们提供,该管道是一个单向管道,自来水只能从水厂流动到我们家里,我们无法从家里将自来水流回到自来水厂。
在一条路径中,与其相关联的边我们可以将其理解为路径的构成要素。即只有两个顶点有将其相连接的边(或者弧)那这两个顶点之间才会存在路径:
就比如上图中,顶点F与其它顶点之间都没有与之相连的边或弧,因此顶点F与其它顶点之间不存在路径。
回路:第一个顶点与最后一个顶点相同的路径就是回路,也称为环。
就比如在上面的有向图中,存在一条回路为: a , b , a a, b, a a,b,a,或者上面的无向图中,每个顶点都存在两条回路,以点A为例:
简单路径:在路径序列中顶点不重复出现的路径称为简单路径。
简单的来说就是在路径中不存在回路,这里我们有向图为例:
在上图中,顶点A到顶点E存在以下路径:
这里的路径1就是简单路径,路径2中存在顶点B与顶点C的回路,因此不是简单路径。
简单回路:在回路中,除了第一个顶点和最后一个顶点外,其它顶点都不重复出现。
这里我们还是以这个图为例:
在这两个回路中,回路1就是只有第一个顶点和最后一个顶点相同,因此它就是简单回路;
在回路2中,除了第一个顶点与最后一个顶点外,还存在其它重复的顶点,因此它不是简单回路。
路径长度:路径上的边的数目称为路径长度。
在前面的回路1中,其路径长度为:5;在回路2中,其路径长度为7。
距离:距离指的是顶点到顶点之间的最短路径。
我们以上图的无向图为例,顶点A到顶点E总共有以下简单路径:
其中,最短路径为简单路径3——A, E,其路径长度为1,因此顶点A到顶点E的距离为1。
那对于顶点A到顶点F呢?它们之间的距离又是多少?
从图中我们不难发现,这两个顶点之间并没有将其连接的边,也就是说,我们无法从A到达F,也没办法从F到达A,因此我们可以说他们之间的距离为 ∞ \infty ∞ 。
这个怎么理解呢?
在无向图总,边就是连接两个顶点之间的桥梁,这就好比两座孤岛,如果这两座孤岛之间存在能够相互联系的方式,如桥梁、船、飞机、潜艇……,只要存在,不管是哪种方式都行,这时我们就有办法测量两座孤岛的距离;
但是,如果这两座孤岛之间无法相互联系,那么我们就无法测量这两座孤岛之间的距离,这时我们就可以将这个距离视为无穷( ∞ \infty ∞),这就和钓鱼一样,钓不到的鱼一定是最大的。
连通:连通指的是两个顶点之间存在路径。
非连通:非连通指的是两个顶点之间不存在路径。
在上图中,顶点a和顶点b就是连通的,顶点c和其他两个顶点就是非连通的。
连通图:连通图指的是所有的顶点都是连通的无向图。
在上图中,所有的顶点之间都存在路径,因此顶点与顶点之间都是连通的。像这种顶点与顶点之间都连通的无向图,我们就称为连通图。
非连通图:非连通图指的是存在非连通的顶点的无向图。
在上图中,顶点d与其它顶点都不连通,像这种存在非连通的无向图,我们就称为非连通图。
强连通:强连通指的是两个顶点之间相互存在有向路径。
非强连通:非强连通指的是两个顶点之间最多存在一条有向路径。
在上图中,顶点a和顶点b之间既存在弧,又存在弧,因此我们称这两个顶点式强连通的;顶点b和顶点c之间只存在弧,并不存在弧
强连通图:强连通图指的是所有顶点之间都是强连通的有向图。
在上图中,顶点与顶点之间都是连通的,这就是我们说的强连通图。
非强连通图:非强连通图指的是存在非强连通顶点的有向图。
在上图中,顶点d和顶点e就是非强连通顶点:
像这种存在非强连通顶点的有向图就是非强连通图。
子图:子图指的是图G的子集。
在这个有向图中,我们可以取一个子集:
这个子集就是原图G的子图。但是并不是任何子集都是原图的子图:
当我们所取的子集无法构成一个图时,那么这个子集就不是原图的子图。
生成子图:生成子图指的是由原图中的所有顶点集以及边集的子集构成的图。
上图是我们在原图中所取的一个有顶点集和边集的子集构成的子图,这就是原图的一个生成子图。
在生成子图 G ′ G' G′ 中,顶点集 V ′ V' V′ 一定与原图的顶点集 V V V 相等,即 V ′ ⟺ V V' \iff V V′⟺V 。
极大连通子图:极大连通子图又称为连通分量,指的是在无向图子图中,包含尽可能多的顶点与边组成的子图,且该子图也是一个连通图。
在这个无向图中,存在两个子图:
这两个子图就是图G的两个连通分量。
这时有朋友可能就会问了,是不是所有的子图只要是连通图,那就是一个连通分量呢?
如子图 G 3 = ( V 3 , E 3 ) G_3 = (V_3, E_3) G3=(V3,E3), 其中 V 1 = { a , b } , E 1 = { ( a , b ) } V_1 = \{a, b\},\ E_1 = \{(a, b)\} V1={a,b}, E1={(a,b)}
很遗憾的告诉你,这个子图不是连通分量。这里我们一定要谨记连通分量是图中极大的连通子图,即子图内的所有顶点必须相互连通,且无法通过添加更多的顶点或边来维持这种连通性。
像子图 G 3 G_3 G3我们就可以通过增加顶点c继续维持这种连通性,因此子图 G 3 G_3 G3不是图 G G G的连通分量。
极大强连通子图:极大强连通子图又称为强连通分量,是有向图的子图中包含尽可能多的顶点和边组成的强连通图。
这里我就不再举例说明,我们只需要明确几点:
本文系统讲解了图的五大核心概念:
下一篇中,我们将继续深入:
• 生成树:连通图的极小连通子图
• 边的权:带权图的应用场景(如最短路径问题)
• 稠密图与稀疏图:边数与顶点数的关系对算法效率的影响
如果本文对你有所启发,欢迎:
• 点赞⭐收藏:方便随时回顾
• 评论:留下你的疑问或见解
• 关注:第一时间获取更新
• 转发:分享给更多需要的伙伴
感谢支持,我们下期见!
继续探索:
下一篇——《图的进阶:生成树、边的权与稠密图》