算法:非铰接顶点

Algorithm: non-Articulation vertex

本文关键字:顶点 算法      更新时间:2023-10-16

图G的连接顶点是其删除的顶点设G是一个有n个顶点和m条边的图。给一个求G的一个非顶点的简单O(n+m(算法关节顶点——即其删除不会断开G.

设初始顶点数为n,则在去除一个顶点后,我们应该有n-1条边。我使用dfs遍历图并计算顶点的数量。如果计数小于n-1,它就是一个关节顶点,所以我把它加回来。否则就不是了,我增加了一个计数器。

有什么更好的方法来找到非关节顶点,因为这个方法很慢,我需要O(n+m(。

使用DFS(深度优先搜索(是一个很好的开始方式,因为它本身已经是一个O(V+E(。因此,我们的想法是遍历一次图,然后能够计算出它的属性。旁注:无论何时执行图形算法,都要思考循环

证明关节顶点合理的条件(在DFS的思维方式下(:

  1. 根节点是一个关节点iff它有多个子

  2. Leaf从来都不是一个关节点

  3. 非叶、非根节点u是一个关节点iff没有非树边缘从u 的某个子树下的子树到达u之上

这涵盖了所有情况:根节点、叶子和介于两者之间的任何其他节点。


对于非关节顶点,我们只需要找到证明相反的条件:

  1. 根节点是非关节点iff它有一个子节点
  2. 始终是一个非铰接点
  3. 非叶、非根节点u是一个非关节点iff有一个非树边从u的某个子树下的子树延伸到u之上

数字3可以读作:如果节点u在两个分裂的树之间有另一个连接,也就是一个循环。


以下是一些关节顶点代码。您可能需要对其进行调整。