本文学习自 Tarjan算法:求解图的割点与桥(割边),以leetcode1192题为练习讲述割边的求法。
一、割边的定义
在无向图中,若去掉某条边会导致图中的连通分量增加,则这条边称为割边(或称为桥)。
而连通分量,就是一个图的某个子图,该子图中的所有顶点互相连通(任意两个顶点之间都存在可以互相到达的路径),而这些顶点都与子图之外的其他顶点不连通。
二、Tarjan算法原理
Tarjan算法是基于深度优先搜索的算法。
- 进行DFS时,若我们从节点U出发,访问到的下一个还未被访问到的节点V,则称U是V的父节点,V是U的子节点。
- 在访问到节点U之前所有已经访问过的节点,称为U的祖先节点。
- 通过上面的定义可知,从节点V出发访问到节点U有两种方式,一种是通过U-V之间的边,另一种是V先访问U的祖先节点,再通过U的祖先节点访问到U。(U和其祖先节点之间必有互相连通的路径)
- 若我们删去U-V之间的边之后,我们再也找不到从V出发访问到U的路径&