最小生成树的两种方法

克鲁斯卡尔算法:

图解过程:原图如下                                               边集数组按权值顺序排列

最小生成树的两种方法_第1张图片           最小生成树的两种方法_第2张图片

最小生成树的两种方法_第3张图片                最小生成树的两种方法_第4张图片

边<1, 2>和<4, 5>在添加到图中的时候形成了环,所以不能将v1和v2,v4和v5连起来。

普里姆算法

方法:从指定顶点开始将它加入集合中,然后将集合内的顶点与集合外的顶点所构成的所有边中选取权值最小的一条边作为生成树的边,并将集合外的那个顶点加入到集合中,表示该顶点已连通.再用集合内的顶点与集合外的顶点构成的边中找最小的边,并将相应的顶点加入集合中,如此下去直到全部顶点都加入到集合中,即得最小生成树.
例在下图中从1点出发求出此图的最小生成树,并按生成树的边的顺序将顶点与权值填入表中.

———————>先写出其邻接矩阵

第一步:从①开始,①进集合,用与集合外所有顶点能构成的边中找最小权值的一条边
①——②权6
①——③权1 -> 取①——③边
①——④权5

 

第二步:③进集合,①,③与②,④,⑤,⑥构成的最小边为
①——④权5
③——⑥权4 -> 取③——⑥边

第三步:⑥进集合,①,③,⑥与②,④,⑤构成的各最小边
①——②权6
③——②权5
⑥——④权2 -> 取⑥——④边

第四步:④进集合,①,③,⑥,④与②,⑤构成的各最小边
①——②权6
③——②权5 -> 取③——②边
⑥——⑤权6

第四步:②进集合,①,③,⑥,②,④与⑤构成的各最小边
②——⑤权3 -> 取②——⑤边

这部分是转载的:http://blog.csdn.net/weinierbian/article/details/8059129/

      感觉简单点就是直接找,1到3,3到6,6到4,然后没法弄了,返回去找已经走过的结点,找最小的路,然后继续走,走一下,找一下最小的(可能不对,不过我确实是这样弄得)

对图,分别给出使用普里姆算法和克鲁斯卡尔算法生成最小生成树的过程。



你可能感兴趣的:(数据结构)