图论:桥(割边)和割点

定义

对于无向图,如果删除了一条边,**整个图的联通分量数量变化,**则这条边称为桥
如图,红色标注的线就是该图的一条桥(顶点3和顶点5的边).
示例桥

性质

  • 一个图中可以有多条桥
    如下图,红色的边都是图中的桥
    一个图中可以有多条桥

  • 一棵树的所有边都是桥
    如下图,红色边都是图中的桥,一颗树中任意一条边的断开都会导致图中联通分量发生变化
    一棵树的所有边都是桥

寻找桥

  • 设置两个数组,Order和Low,并将已访问过的顶点置为绿色
    • Order表示当前顶点遍历的顺序
    • Low表示当前顶点能访问到的顶点的最小值
  • 递归遍历,给0-1-3-2顶点依次标上Order和Low,并且将已访问过的顶点置为绿色,如下图
    在这里插入图片描述
  • 在顶点2时 所有连接的顶点都已被访问,并且可以访问到的最小顶点为0,故将Low[2]置为0,并且将顶点置为绿色
    在这里插入图片描述
  • 回退到顶点3,将Low[3]的值置为min(Low(2),Low(0))
    在这里插入图片描述
  • 访问顶点3的另一个连接的顶点5,并依次给5-4-6标上Order和Low,并且将已访问过的顶点置为绿色,如下图
    在这里插入图片描述
  • 到达顶点6时,其连接的顶点都被遍历过,此时将Low[6]置为min(Low(5), Low(4)),并将节点置为绿色
    在这里插入图片描述
  • 回退到顶点4,其连接的顶点都被遍历过,此时将Low[4]置为min(Low(5), Low(6))
    在这里插入图片描述
  • 回退到顶点5,此时的Low[5]>Order[3],即顶点5无法访问到顶点3的祖先顶点的,故顶点3-顶点5是一条桥,如下图
    重新复习下Order和Low的定义
    • Order表示当前顶点遍历的顺序
    • Low表示当前顶点能访问到的顶点的最小值
      在这里插入图片描述
  • 依次回退到顶点3-1,到达顶点1时,其连接的顶点都被遍历过,此时将Low[1]置为min(Low(3), Low(0))
    在这里插入图片描述
  • 至此,查找完成,在图中有且存在一条桥(顶点3-顶点5),整个过程的动图如下
    查找桥(动图)

查找桥使用了深度优先遍历(DFS),可否使用广度优先遍历(BFS)? -> 不能!

详情请看BFS遍历树和DFS遍历树

割点

定义

对于无向图,如果删除了一个顶点(顶点邻边也删除),整个图的联通分量数量改变,则称这个顶点为割点,如下图,顶点3和顶点5就是该图的两个割点
示例

性质

与桥的性质类似

  • 一个图可以有多个割点
  • 桥两边的点不一定是割点,如一棵树
  • 一棵树不是每一个点都是割点(一棵树的每一条边都是桥)

查找割点

注意:以下描述中,分为顶点和节点,顶点为图中的每一个顶点,节点为遍历树中的每一个节点
同寻找桥一致,给各个顶点标记上Order和Low(详情请参照文章前部的寻找桥)
在这里插入图片描述
遍历树中,假设节点v有一个孩子节点w,满足Low[w]>=Order[v],则v是割点
分析:

  • 如果孩子节点w最小能到达的节点就是它的父节点v,那么如果断开节点v,则w无法再访问到小于v的任何节点,所以该理论成立
  • 根节点
    • 在图中绝对不包含比根节点小的节点,所以上述的判断方式不适用于根节点
    • 对于根节点,如果有一个以上的孩子节点,则这个根节点是割点,如下图
      根节点有多个子节点