图的强连通性:Korasaju算法实现
来源:互联网 发布:诺基亚java下载专区 编辑:程序博客网 时间:2024/05/29 02:18
强连通性:如果有向图中的任意两顶点互相可到达,则该图是强连通的。
有向图强连通性的概念和性质:
1.称有向图G =(V , E) 顶点v ,w∈V是等价的, 要么v = w; 要么从 v 到 w 有一条有向路 ,并且从 w 到 v 也有一条有向路2.设 Ei(1≤i≤r) 是头、 尾均在Vi 中的边集, 则Gi =(Vi, Ei ) 称为 G的一个强连通分量, 简称强分量、强支。
3.对于有向图, 在其每一个强连通分量中, 任何两个顶点都是可达的。 vG,与v可相互到达的所有顶点就是包含v的强连通分量的所有顶点
4.设从v可到达(以v为起点的所有有向路径的终点)的顶点集合为T1(G),而到达v(以v为终点的所有有向路径的起点)的顶点集合为T2(G),则包含v的强连通分量的顶点集合是:T1(G)∩T2(G)
5.性质定理:
一个有向图是强连通的。当且仅当G中有一个回路。他至少包含每个顶点各一次。
求有向图强连通分支的算法—Korasaju算法
输入:有向图G
输出:有向图的强连通分量(森林的孩子-兄弟表示)
算法步骤:
1.深度优先遍历G(起点如何选择无所谓),并计算出每个顶点U的结束时间dfn[u];
2.深度优先遍历G的转置(反向)图GT,选择遍历起点时,按照顶点结束时间从大到小进行。遍历过程中,一边遍历,一边给顶点做分类标记,每找到一个新的起点,分类标记就加1;
3.第二步中产生的标记值相同的顶点构成深度优先森林中的一棵树,也即一个强连通分量
求有向图强连通分支的Korasaju算法实现
/* 按弧的正向搜索, 起点如何选择无所谓 */int in_order[MAX_VEX] ;void DFS(OLGraph *G int v) { ArcNode *p ;Count=0 ;visited[v]=TRUE ;for (p=G->xlist[v] .firstout ; p!=NULL ; p=p .firstout ; p!=NULL ; p=p->tlink)if (!visited[p->headvex])DFS(G p , p->headvex) ;in_order[count++]=v ;}/* 对图G按弧的逆向进行搜索 */void Rev_DFS(OLGraph *G , int v){ ArcNode *p ;visited[v]=TRUE ;printf(“%d” , v) ; /* 输出顶点 */for (p=G->xlist[v].firstin ; p!=NULL ; p=p->hlink)if (!visited[p->tailvex])Rev_DFS(G , p->tailvex) ;}void Strongly_Connected_ Component(OLGraph *G){ int k=1, v, j ;for (v=0; v<G->vexnum; v++) visited[v]=FALSE ;for (v=0; v<G->vexnum; v++) /* 对图G正向遍历 */if (!visited[v]) DFS(G, v) ;for (v=0; v<G->vexnum; v++)visited[v]=FALSE ;for (j=G->vexnum-1; j>=0; j--) { /* 对图G逆向遍历 */v=in_order[j] ;if (!visited[v]) {printf(“\n第%d个连通分量顶点:”, k++) ;Rev_DFS(G, v) ;}}}
Korasaju算法复杂度分析:
跟深度优先搜索的复杂度相同:O(|V|+|E|)。其他求有向图强连通性的算法:
Tarjan算法(与关节点算法似)
Gabow算法。
0 0
- 图的强连通性:Korasaju算法实现
- 强连通分量korasaju算法
- 图的连通性判断(算法实现)
- 有向图的强连通性
- HDU 3072 //图的强连通性,缩点后求树形图 //kosaraju算法
- HDU 3072 //图的强连通性,缩点后求树形图 //TARJAN算法
- 图的连通性判断算法
- 1236 Network of Schools 图的强连通性
- 图的连通性问题之强连通分量初步
- 强连通性Tarjan算法和LCA
- Korasaju 算法模板
- 图的连通性-kosaraju算法学习
- 图的连通性算法(Tarjan)
- 图的连通性问题之tarjan算法
- 算法_10 : 图算法_2: 图的连通性
- 强连通分量(Korasaju、Tarjan)
- Korasaju
- 连通性问题 之 Tarjan算法求强连通分量
- [LeetCode]Two Sum
- html中设置文本字间距
- 机器学习基础(四十六)—— 遗传算法(GA)
- 图像格式jpg、jpeg、jpe、gif、png、png等有何不同?ps中那种图片格式可以保留图层?
- Java数组之基础(三)
- 图的强连通性:Korasaju算法实现
- Unity的UI文档
- Kafka源码分析之KafkaProducer发送数据send()方法
- Java的编译、运行
- 【LeetCode】76. Minimum Window Substring
- 微积分计算图:反向传播算法
- 纹理特征提取——灰度共生矩阵
- listview使用笔记
- Jersey Rest 异常统一处理机制