原创 最小生成树------Kruskal算法

2013-11-12 14:31 554 6 1

  举个例子:

Kruskal算法
line void Kruskal (E,COST[],n,T,minCOST) {
//G有n个结点,E是G的边集。COST(u,v)是边(u,v)的成本。
//T是最小成本生成树的边集,minCOST是它的成本

l float minCOST,COST[n][n];
2 int Parent[n],T[n-1][2],n
3 以边成本为元素构造一个min一堆;

4 Parent=l; //每个结点都在不同的集合中
5 i=minCOST=06 while(i<n-l) and (堆非空) do
7 从堆中删去最小成本边(u,v).并重新构造堆
8 j=Find;k=Find[v] ;
9 if(j!=k) { i=i+110 T[i,l]=u;T(i,2)=v;
11 minCOST = minCOST + COST(u,v);
12 union(j,k)
13 }if
14 }//while
15 if(i!=n-l) { print(’no spanning tree’)};//if
16 return T;
17 }// Kruskal

 

 

引理 设T是无向连通图G的一棵生成树。对于任一条边e∈E(G),但不属于E(T),有:①若将e加人到T,则生成一个唯一的环;②从E(T) ∪ {e}中去掉这环中的任意一条边后,剩        余的边构成G的一棵树。

作者: 李肖遥, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3912462.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条