0%

图的连通

子图

有两个图G=(V,E)和G’=(V’,E’),V’是V的子集且E’是E的子集,称G’是G的子图。

并非所有V和E的子集都能构成G的子图,因为这样的子集可能不是图。

连通

无向图中顶点u到顶点v之间有一条路径,称顶点u和顶点v是连通的。

强连通

有向图中顶点u到顶点v之间有一条路径,顶点v到顶点u之间也有一条路径,称顶点u和顶点v是强连通的。

弱连通

有向图中顶点u到顶点v之间有一条路径,顶点v到顶点u之间没有路径,称顶点u和顶点v是弱连通的

连通图

无向图中任意两个顶点连通,称此无向图为连通图。

强连通图

有向图中任意两个顶点强连通,称此有向图为强连通图。

弱连通图

有向图的边去掉方向后是一个连通图,称此有向图为弱连通图。

非连通图

一个图的顶点数为n,若边数小于n-1,则该图是非连通图,即图的所有边无法连接图中所有的顶点。

非连通图

连通子图

在非连通图中,存在至少两个连通的子图。

极大连通子图(针对无向图)

非连通图中的连通子图称为极大连通子图。

加入任何一个不在它的点集中的点都会导致它不再连通,极小连通子图似乎也有这个性质?

无向连通图只有一个极大连通子图,就是本身。

极小连通子图(针对无向图)

保持子图连通但边数最少。

若极小连通子图有n个顶点,则其有n - 1条边。

极大强连通子图(针对有向图)

子图中的每两个顶点都是强连通的。

推论:一个环肯定是极大强连通子图,每两个顶点互相都有路径到达。

连通分量(针对无向图)

无向图中的极大连通子图称为无向图的连通分量。

无向连通图只有一个连通分量,为本身。

强连通分量(针对有向图)

有向图的极大强连通子图。

割点

对于一个无向图,如果把一个点删除后这个图的极大连通分量数增加了,那么这个点就是这个图的割点(又称割顶)。

来自 <https://oi-wiki.org/graph/cut/>

桥(割边)

对于一个无向图,如果删掉一条边后图中的连通分量数增加了,则称这条边为桥或者割边。

来自 <https://oi-wiki.org/graph/cut/>

tarjan算法

dfn[u]是图的dfs节点访问次序,dfn意为depth first number

low[u]是默认为dfn[u],如果dfs时通过一条边访问到了已访问的节点,选取已访问节点中的最小的dfn值

low数组在另一个意义上可以看作,把有环的部分给标记出来了,环上的节点low值都一样

参考资料:

tarjan算法有什么应用场景?

  1. 求图的割点
  2. 求图的割边(桥)
  3. 判断图的连通性
  4. 判断图有没有环

tarjan算法为什么可以判断图的割点和割边?

判断一个顶点是不是割点除了从定义,还可以从DFS(深度优先遍历)的角度出发。我们先通过DFS定义两个概念。

假设DFS中我们从顶点U访问到了顶点V(此时顶点V还未被访问过),那么我们称顶点U为顶点V的父顶点,V为U的孩子顶点。在顶点U之前被访问过的顶点,我们就称之为U的祖先顶点。

显然如果顶点U的所有孩子顶点可以不通过父顶点U而访问到U的祖先顶点,那么说明此时去掉顶点U不影响图的连通性,U就不是割点。相反,如果顶点U至少存在一个孩子顶点,必须通过父顶点U才能访问到U的祖先顶点,那么去掉顶点U后,顶点U的祖先顶点和孩子顶点就不连通了,说明U是一个割点。

来自:Tarjan算法:求解图的割点与桥(割边)

tarjan算法在LeetCode中的可以应用的题目?