2017-7-20-最小生成树(普里姆算法和克鲁斯卡尔算法)

所谓的最小生成树是:在给定的一个带权的无向连通图,如何选取一棵生成树,
使树上所有边上权的总和最小。

求最小生成树的算法一般有普里姆算法和克鲁斯卡尔算法。

普里姆算法:
图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连通的顶点陆续加入到集合中,全部顶点加入集合后就得到所需的最小生成树 .
方法:从指定顶点开始将它加入集合中,然后将集合内的顶点与集合外的顶点所构成的所有边中选取权值最小的一条边作为生成树的边,并将集合外的那个顶点加入到集合中,表示该顶点已连通.再用集合内的顶点与集合外的顶点构成的边中找最小的边,并将相应的顶点加入集合中,如此下去直到全部顶点都加入到集合中,即得最小生成树.

克鲁斯卡尔算法:
图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.
方法:将图中边按其权值由小到大的次序顺序选取,若选边后不形成回路,则保留作为一条边,若形成回路则除去.依次选够(n-1)条边,即得最小生成树.(n为顶点数)

下面插入在网上找到的关于这两个算法的图,一看就明了了

转自http://blog.csdn.net/weinierbian/article/details/8059129/
感觉他说的很清晰明了,大家可以看看。