图的割边
来源:互联网 发布:单片机485接口电路 编辑:程序博客网 时间:2024/04/30 08:54
//图的割边定义与图的割点类似,即去掉某条边之后,剩余的顶点之间不能相互之间到达,其实质就是将公式里的low[v]>=num[u]的等号去掉,因为"="说明能到
//父节点,而父节点是被去掉的(不包含在剩余的点里),所以哪怕“=”也成立,而割边就是连父节点都到不了,所以改成low[v]>num[u]
//另外值得注意的是在割点中,有一种特殊情况就是根节点之下只有一个子节点,这样不是割点,但它属于割边,所以不需要分类讨论~~
//父节点,而父节点是被去掉的(不包含在剩余的点里),所以哪怕“=”也成立,而割边就是连父节点都到不了,所以改成low[v]>num[u]
//另外值得注意的是在割点中,有一种特殊情况就是根节点之下只有一个子节点,这样不是割点,但它属于割边,所以不需要分类讨论~~
#include <stdio.h>int a[101][101];int n;int num[101];int low[101];int index;int min(int a,int b){ return a<b?a:b;}int dfs(int cur,int father){ int i; index++; num[cur]=index; low[cur]=index; for (i=1;i<=n;i++) { if (a[i][cur]==1) { if (num[i]==0)//如果还没有被访问过,说明是cur的子节点 { dfs(i,cur); low[cur]=min(low[i],low[cur]);//如果子节点的low小,说明子节点还与其他祖先节点相连 if (low[i]>num[cur]) printf("%d-%d\n",cur,i); } else if (i!=father) low[cur]=min(low[cur],num[i]);//如果是祖先节点,那么更新num } }return;} int main() { int i,m,j,x,y; scanf("%d%d",&n,&m); for (i=1;i<=n;i++) for (j=1;j<=n;j++) a[i][j]=0; for (i=1;i<=m;i++) { scanf("%d%d",&x,&y); a[x][y]=1; a[y][x]=1; } dfs(1,1); return 0;}
0 0
- 图的割点和割边
- 图的割点和割边
- 图的割点,割边
- 图的割边
- 图的割边
- 图的割点与割边学习笔记
- 无向连通图的割点与割边
- 图的割边、割点、块、缩点问题
- 图的割点与割边实现
- 图的割点和割边-裸题
- hdu 4738 图的割边
- 图的割边(代码)
- 图的割点
- 图的割点
- 图的割点
- 图的割点
- 连通图的割点、割边 连通图的割点、割边(桥)、块、缩点,有向图的强连通分量
- 无向图的割边,双连通||有向图的强连通,割边
- 简单的背包问题
- Git常用命令大全
- ROS学习(三)参数服务与launch文件
- 搭建SVN
- 杭电1022 train problom
- 图的割边
- [leetcode] Median of Two Sorted Arrays
- STM32 KEIL下的堆栈设置
- ipythonnotebook + spark
- 每行最后一个li的样式独立设置
- C语言程序 循环结构
- c++ primer 练习题 Exericise 2.3.3
- 内存泄露和内存溢出
- ListView的HeaderView