/**连通体*/
object ConnectComponents {
/**在图中若从某个顶点Vp出发,沿着一些边经过顶点V1,V2,。。。Vm到达Vg则称顶点序列(Vp,V1,V2....Vm,Vg)为从Vp到Vg的路径,其中Vp是路径的起始点,Vg为路径终点。
* 路径上的边的数目成为该路径的长度
* 连通:在无向图中,若从顶点Vi到顶点Vj之间有路径称为这两个顶点是连通的。
* 连通图:若图中任意一对顶点之间都是连通的,则称为此图为连通图。
* 连通分量:非连通图中的每个连通部分称为连通分量
* 强连通:对于有向图,若从顶点Vi到顶点Vj到顶点Vi之间都有路径,则称这两顶点是强连通的。
* 强连通图:若有向图中任何一对顶点都是强连通的,则此图为强连通图。
*
* 性质:
* 无向连通图,则边E的数目大于等于顶点V的数目减1:|E| >= |V| - 1,反之不成立;
* 有向强连通图的必要条件是边的数目大于等于顶点的数目:|E| >= |V|,反之不成立。
* 没有回路的无向图是连通的当且它是树,即等价于:|E| = |V| - 1
* */
def conCompts(sc: SparkContext): Unit ={
val graph = Graph(sc.makeRDD((1L to 7L).map((_,""))),
sc.makeRDD(Array(Edge(2L,5L,"配偶"),Edge(5L,3L,"亲戚"),Edge(3L,2L,"子女"),Edge(4L,5L,"父母"),Edge(6L,7L,"亲戚")))
)
graph
.connectedComponents()
.vertices
.map(_.swap)
.groupByKey().map(_._2)
.foreach(println)
}
/**强连通:
* (1)对图中所有节点设定初始连通分支id,用自己的节点id作为所属连通分支的id,并将所有节点打上初始标记false;
* (2)首先做循
强连通体的GraphX的实现和解析
最新推荐文章于 2023-11-22 08:29:56 发布
本文深入探讨了图论中的连通性概念,包括无向图和有向图的连通性定义,如连通图、连通分量、强连通图及强连通分量。详细介绍了判断连通性和强连通性的算法过程,以及通过Spark GraphX实现连通组件和强连通组件的计算。

最低0.47元/天 解锁文章
30

被折叠的 条评论
为什么被折叠?



