关于双连通的有关定义可以参照以下博客:
https://blog.csdn.net/huangshuai147/article/details/51356074
https://blog.csdn.net/huzujun/article/details/81086496
https://blog.csdn.net/cj1064789374/article/details/85037242
BCC:
图中的D点和E点我们称之为关节点。通过图中可以看到,如果D点或者E点有一个点不存在了,那么这两个关系网就会断裂。
BCC分解:
上图我们可以通过BCC分解得到3个点-双连通图,如下图所示:
点-双连通图:图中的任何一个点到达其余的点的路径至少两条(即图中没有关节点)。
BCC分解实际上就是对关节点进行分身,上面的例子就是把关节点分成两个(注意,进行BCC分解时关节点不一定非得分成两个,也可以分成很多个)
对于一张无向图,它的点-双连通的极大子图称为双连通分量(Biconnected Component)。
边-双连通的极大子图称为边-双连通分量(edge-biconnected component)。
求关节点:
我们通过深搜来求关节点,具体做法如下:
情况一:(叶节点)
通过深搜,我们可以得到一个树,如下图所示:
图中的黄色顶点就是叶子节点,叶子节点肯定不是关节点
原因:树中的叶子节点如果丢失,那么树中的其他节点也可以连通,无法出现多个关系网
情况二:(根节点)
图中的根节点的孩子如果只有一个,那么该根节点不可能是关节点,如上图左图所示
图中的根节点的孩子如果有多个,那么该根节点就是关节点,如上图右图所示
情况三:(普通节点)
对于图中的v点,如果以它的孩子为根节点的部分(如图中的蓝色部分)中的任何节点往上指的节点的等级不超过v点的等级,那么v点就是一个关节点。如图中左边的蓝色部分(只要存在一个图中左边蓝色部分,那么v点就是关节点)