举个例子:
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=0 ; 6 while(i<n-l) and (堆非空) do 7 从堆中删去最小成本边(u,v).并重新构造堆 8 j=Find;k=Find[v] ; 9 if(j!=k) { i=i+1; 10 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
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论