博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求图的割边(桥)(邻接矩阵 无向图)C~
阅读量:4216 次
发布时间:2019-05-26

本文共 1134 字,大约阅读时间需要 3 分钟。

割边: 在无向图中, 如果删去某条边后,图不再连通,则称该边为割边。

类似于求割点 把 求割点中的  low[v] >= num[u] 改为 low[v] > num[u] 即可。

low[v] >=  num[u] 表示 v不可能不经过父节u而回到祖先(包括父亲)

low[v] > num[u] 则在上个条件的基础上 连 父亲节点也回不去了

代码实现如下:

#include
#include
#define MAXVEX 100#define INF 65535int num[MAXVEX] = {0}, low[MAXVEX];int e[MAXVEX][MAXVEX];int child, index;int n, m;int cnt;int min(int a, int b) { return a < b ? a : b; }void dfs(int cur, int father) { int i; index++; num[cur] = index; low[cur] = index; child = 0; for(i = 1; i <= n; i++ ){ if(e[cur][i] == 1){ if(num[i] == 0){ child++; dfs(i, cur); low[cur] = min(low[cur], low[i]); if(low[i] > num[cur]){ printf("\t%d-%d\n",cur, i); cnt++; } } else if(i != father){ low[cur] = min(low[cur], num[i]); } } } } int main() { int i, j, x, y; scanf("%d%d",&n,&m); for(i = 1; i <= n; i++ ){ for(j = 1; j < n; j++ ){ if(i == j) e[i][j] = 0; else e[i][j] = INF; } } cnt = 0; index = 0; for(i = 1; i <= m; i++ ){ scanf("%d%d",&x,&y); e[x][y] = 1; e[y][x] = 1; } printf("\n割边: \n"); dfs(1, 1); printf("\n共有%d条 ",cnt); return 0; }

你可能感兴趣的文章
测试的分类
查看>>
photoshop cc2019快捷键
查看>>
pycharm2019版本去掉下划线的方法
查看>>
九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)
查看>>
leetcode 13: Roman to Integer
查看>>
a标签中调用js方法
查看>>
js函数中传入的event参数
查看>>
[hive]优化策略
查看>>
c++14现代内存管理
查看>>
右值引用,move语义和完美转发
查看>>
c++使用宏检测类是否包含某个函数或者变量属性
查看>>
CSS之Multi-columns的column-gap和column-rule
查看>>
CSS之Multi-columns的跨列
查看>>
CSS之浮动(一)
查看>>
CSS之浮动(二)
查看>>
AtomicInteger源码解析
查看>>
CopyOnWriteArraySet源码学习
查看>>
Openfiler 配置 NFS 示例
查看>>
Oracle 11.2.0.1 RAC GRID 无法启动 : Oracle High Availability Services startup failed
查看>>
Oracle 18c 单实例安装手册 详细截图版
查看>>