c - 切割顶点(或)关节点
问题描述
任何人都可以向我提供有关此代码中发生的事情的详细图片说明吗?
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 到达的最低编号顶点,并且可能有一个后边(按此顺序)。
解决方案
推荐阅读
- python - 从条目中获取值以在框架内
- python-3.x - 如何在 sklearn 中执行 train_test_split 但根据列的某个成员限制/指定输出?关闭
- javascript - vue + 复选框 + 更改事件 - 页面和控制台上的不同结果
- jenkins - 我们如何在两个 Jenkins 大师之间共享凭证
- python - 由于项目主 urls.py 中的配置错误,Django 无法正确处理获取请求
- discord.py - 如何实现暂停命令(lavalink)?
- javascript - event.stopPropagation() 不起作用 - 捕获仍然传递函数
- php - 仅在 WooCommerce 前端将小数样式化为大写
- android - activity1 内部的 fragment1 和 activity2 内部的 fragment2 之间的共享转换
- c - 编写函数以返回大小有限的字符串数组的最佳方法(char *x [MAX] vs char **x)?