任何人都可以向我提供有关此代码内发生的情况的详细图形说明吗?
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可到达的最低编号的顶点。