首页 > 解决方案 > 切割顶点(或)关节点

问题描述

任何人都可以向我提供有关此代码中发生的事情的详细图片说明吗?

int adjMatrix[256][256];
int dfsnum[256], num = 0, low[256];
void cutVertices(int u) {
    low[u] = dfsnum[u] = num++;
    for(int v = 0; v<256; ++v) {
        if(adjMatrix[u][v] && dfsnum[v] == -1) {
            if(low[v] > dfsnum[u]) 
                printf("CutVertex:%d",u);
            low[u] = min(low[u], low[v]);
       }
       else {
           low[u] = min(low[u], dfsnum[v]);
   }
   }

这实际上是一种使用 DFS 搜索结果树找到割顶点的方法。

该方法说根顶点是一个割顶点当且仅当它至少有两个孩子。非根顶点 u 是割顶点当且仅当存在 u 的子 v 使得 low(v) >= dfsnum(u)。其中low(v) = 通过取零个或多个树边可以从v 到达的最低编号顶点,并且可能有一个后边(按此顺序)。

标签: calgorithmgraph

解决方案


推荐阅读