切割顶点(或)关节点

时间:2019-03-27 17:06:27

标签: c algorithm graph

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

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的子v使得low(v)> = dfsnum(u)时,非根顶点u才是割顶点。 其中low(v)=通过获取零个或多个树边缘和可能的一个后边缘(按该顺序)从v可到达的最低编号的顶点。

0 个答案:

没有答案