求图的割边(桥)(邻接矩阵 无向图)C~
来源:互联网 发布:九阴真经捏脸数据 编辑:程序博客网 时间:2024/05/22 17:05
割边: 在无向图中, 如果删去某条边后,图不再连通,则称该边为割边。
类似于求割点 把 求割点中的 low[v] >= num[u] 改为 low[v] > num[u] 即可。
low[v] >= num[u] 表示 v不可能不经过父节u而回到祖先(包括父亲)
low[v] > num[u] 则在上个条件的基础上 连 父亲节点也回不去了
参考求割点的算法
代码实现如下:
#include<stdio.h>#include<stdlib.h>#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;elsee[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;}
阅读全文
0 0
- 求图的割边(桥)(邻接矩阵 无向图)C~
- 求无向简单图的割点与割线的问题(邻接矩阵)
- 求无向连通图的割点和割边/桥
- 基于DFS求无向图的割点及桥(割边)算法总结 POJ_1144题解
- hdu3849 Tarjan求无向图的割边+map
- 求无向图的割点和桥
- 求无向图的割点和桥
- 求无向图的 割点和桥 【模版】
- 用邻接矩阵求无向图的连同分支数
- 无向图的邻接矩阵
- 求连通分量(无向图,邻接矩阵,BFS)
- 邻接矩阵(无向图)
- POJ-3352-无向图的割顶和桥-求边-双连通分量
- Tarjan算法求BCC(无向图连通块、割边、割点)
- 【无向图求最小割集】
- 求无向图最小割
- 无向连通图的割点,割边(桥),双连通分量。
- 求无向连通图的割点
- Golang之测试用例
- squid 代理上网
- Http meta详解
- zoj 3211 Dream city dp+贪心
- 问题 : 点球大战
- 求图的割边(桥)(邻接矩阵 无向图)C~
- 关于list从属的关系
- 进程和线程的区别
- maven环境配置
- 快速傅里叶转换 模版
- 在Linux中怎样修改hostname(主机名)
- 【支付系统学习笔记】-支付系统整体架构
- 机房收费系统-上下机
- 问题 : Engine-字符串