最小生成树
建图是图论基础
https://blog.csdn.net/nuoyanli/article/details/88842395
什么是最小生成树
最小生成树:任何只由 的边构成,并包含 的所有顶点的树称为 的生成树( 连通). 加权无向图 的生成树的代价是该生成树的所有边的代码(权)的和. 最小代价生成树是其所有生成树中代价最小的生成树。
可以看啊哈算法理解 或者 参考这个博客
https://blog.csdn.net/luoshixian099/article/details/51908175
算法
-
普利姆( )
此算法可以称为“加点法”,每次迭代选择代价最小的边对应的点,加入到最小生成树中。算法从某一个顶点 开始,逐渐长大覆盖整个连通网的所有顶点。
图的所有顶点集合为 ;
初始令集合 ;
在两个集合 能够组成的边中,选择一条代价最小的边 ,加入到最小生成树中,并把 并入到集合 中。
重复上述步骤,直到最小生成树有 条边或者 个顶点为止。 -
克鲁斯卡尔( )
假设 是一个含有 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含n个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有n棵树的一个森(摘自 )
算法(克鲁斯卡尔算法):(如果想要边的总长度之和最短,我们自然可以想到首先先选最短的边)将所有的边排序,从最小的边开始选,每次连通最小的边,不能形成回路,所以就要求判断两点间是否已经连通。为了优化操作,我们这里用并查集优化,判断其是否在一个树上。如果不在一个树上,就加进去,继续添加,直到所有的边都在一个集合即可(连通)。
时间复杂度为