📜  图表中的关节点(或切割顶点)(1)

📅  最后修改于: 2023-12-03 14:50:49.644000             🧑  作者: Mango

图表中的关节点(或切割顶点)

在计算机科学中,关节点(cut vertices)是指在无向连通图中,删除该点及其相连边可使图不连通的节点。

切割顶点在图论中起着重要作用,因为它们与连通性、流和网络分析等课题有很强的关联。例如,在无向连通图中,可以使用深度优先搜索算法来查找所有的关节点。如下图所示:

cut-vertices-example

其中,红色字母代表每个顶点的名称;白色字母代表每个顶点的搜索编号(在深度优先搜索算法中生成);绿色数字代表每个顶点的最早可到达时间(在深度优先搜索算法中统计);蓝色数字代表每个顶点的最小搜索编号(在深度优先搜索算法中统计)。

根据以上信息,可以确定上图中的顶点 E、D 和 F 是关节点,因为删除它们及其相连边可使图不连通。在实际编程中,可以使用类似以下代码片段的方法来查找关节点:

def dfs(u: int, p: int) -> None:
    global timer
    low[u] = num[u] = timer
    timer += 1
    children = 0
    for v in graph[u]:
        if not num[v]:
            children += 1
            dfs(v, u)
            low[u] = min(low[u], low[v])
            if low[v] >= num[u] and p != -1:
                is_cut_point[u] = True
            if low[v] > num[u]:
                is_bridge[(u, v)] = True
        elif v != p:
            low[u] = min(low[u], num[v])

    if p == -1 and children > 1:
        is_cut_point[u] = True

其中,graph 是图的邻接表表示,numlow 分别代表搜索编号和最小搜索编号,is_cut_pointis_bridge 分别表示关节点和桥的信息。这段代码的时间复杂度为 $\mathcal{O}(n + m)$,其中 $n$ 和 $m$ 分别代表点数和边数。