克鲁斯卡尔算法求最小生成树...请区分按Prim算法和Kruskal算法求最小生成树.

时间:2024-05-06 19:02:03 浏览:559

克鲁斯卡尔算法求最小生成树◇...请区分按Prim算法和Kruskal算法求最小生成树.

袁梓轩作为中国好声响的冠军以其共同的嗓音和创作才气俘获了有数歌迷的心此次登上春晚舞台他将以掌管人的身份亮相让人不由等候他能带来怎样的惊喜

这篇文章给大家聊聊关于,以及对应的知识点,希望对各位有所协助,不要忘了收藏本站哦。

克鲁斯卡尔算法求最小生成树...请区分按Prim算法和Kruskal算法求最小生成树.

文本导读:

  1. ...请区分按Prim算法和Kruskal算法求最小生成树.
  2. 最小生成树实践运用的例子
  3. 请结构下图所示网络最小生成树

...请区分按Prim算法和Kruskal算法求最小生成树.

假定N=(V,E)是一个具有n个顶点的连通网,T=(U,TE)是所求的最小生成树,其中U是T的顶点集,TE是T的边集。

(1)初始U={u0}(u0∈V),TE=φ;

(2)在一切u∈U,v∈V-U的边中选一条代价最小的边(u0,v0)并入集合TE,同时将v0并入U;

此时,TE中必含有n-1条边,则T=(V,{TE})为N的最小生成树。

假定N=(V,E)是一个具有n个顶点的连通网,

(2)按权值由小到大的顺序选择边,所选边应满足两个顶点不在同一个顶点集合内,将该边放到生成树边的集合中。同时将该边的两个顶点所在的顶点集合兼并;

(3)重复(2),直到一切的顶点都在同一个顶点集合内。

最小生成树实践运用的例子

1、最小生成树实践运用的例子如下:

2、Kruskal算法,进程描画:一直以边为主导位置,先选择权值最小的边,总是选择以后可用最小权值边,并且每次判别两点之间能否曾经直接连通,假设曾经直接连通,则跳过此边。时间复杂度是O(n*logn),适用于求边稀疏连通网的最小生成树。

3、Prim算法,进程描画:Prim算法一直以顶点为主导,并且起始点的选择是恣意的。从起始点到其他点选择最小权值边,然后以此边两个顶点区分再找最小权值的边,异样曾经直接衔接的边跳过。时间复杂度是O(n2),适用于求边稀疏连通网的最小生成树。

4、要在n个城市之间铺设光缆,主要目的是要使这n个城市的恣意两个之间都可以通讯,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目的是要使铺设光缆的总费用最低。这就需求找到带权的最小生成树。

5、最小生成树性质:设G=(V,E)是一个连通网络,U是顶点集V的一个非空真子集。若(u,v)是G中一条“一个端点在U中(例如:u∈U),另一个端点不在U中的边(例如:v∈V-U),且(u,v)具有最小权值,则一定存在G的一棵最小生成树包括此边(u,v)。

6、将集合U中的顶点看作是白色顶点,②而V-U中的顶点看作是蓝色顶点,③衔接红点和蓝点的边看作是紫色边,④权最小的紫边称为轻边(即权重最“轻”的边)。于是,MST性质中所述的边(u,v)就可简称为轻边。

7、求MST的普通算法可描画为:针对图G,从空树T末尾,往集合T中逐条选择并参与n-1条平安边(u,v),最终生成一棵含n-1条边的MST。

8、Kruskal算法简述:假定WN=(V,{E})是一个含有n个顶点的连通网,则依照克鲁斯卡尔算法结构最小生成树的进程为:先结构一个只含n个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有n棵树的一个森林。

请结构下图所示网络最小生成树

1、用Kruskal(克鲁斯卡尔)算法,求最小生成树.

2、先将一切边的权值依照从小到大排序:

3、然后,每次提取权值最小边,逐渐组成最小生成树:

4、(2)取边(v2,v6,10),不会发生环路.

5、(3)取边(v1,v3,12),不会发生环路.

6、(4)取边(v1,v4,14),不会发生环路.

7、(5)假设取边(v3,v4,16),会发生环路,所以不能取.

8、这就是最小生成树,连通了一切顶点,总权值最小.

9、//最小生成树Kruskal(克鲁斯卡尔)算法

10、}Edge;//对边集数组Edge结构的定义

11、 for(i=0;i<G->numVertexes;i++)//初始化图

12、 for(j=0;j<G->numVertexes;j++)

13、 G->arc[i][j]=G->arc[j][i]=INF;

14、 for(i=0;i<G->numVertexes;i++)

15、 for(j=i;j<G->numVertexes;j++)

16、 G->arc[j][i]=G->arc[i][j];

17、voidSwapn(Edge*edges,inti,intj)

18、 edges[i].begin=edges[j].begin;

19、 edges[i].weight=edges[j].weight;

20、voidsort(Edgeedges[],MGraph*G)

21、 for(i=0;i<(G->numEdges-1);i++)

22、for(j=i+1;j<G->numEdges;j++)

23、if(edges[min].weight>edges[j].weight)

24、 printf('权值排序之后的为: ');

25、 for(i=0;i<G->numEdges;i++)

26、 printf('(%d,%d)%d ',edges[i].begin,edges[i].end,edges[i].weight);

27、voidMiniSpanTree_Kruskal(MGraphG)

28、 intparent[MAXVEX];//定义一数组用来判别边与边能否构成环路

29、 Edgeedges[MAXEDGE];//定义边集数组,edge的结构为begin,end,weight,均为整型

30、 for(i=0;i<G.numVertexes-1;i++)

31、 for(j=i+1;j<G.numVertexes;j++)

32、 sort(edges,&G);//从小到大排序

33、 for(i=0;i<G.numVertexes;i++)

34、 printf('打印最小生成树: ');

35、 for(i=0;i<G.numEdges;i++)//循环每一条边

36、 n=Find(parent,edges[i].begin);

37、 if(n!=m)//假设n与m不等,说明此边没有与现有的生成树构成环路

38、 parent[n]=m;//将此边的开头顶点放入下标为终点的parent中

39、//表示此顶点曾经在生成树集合中

40、 printf('(%d,%d)%d ',edges[i].begin,edges[i].end,edges[i].weight);

樊振东自己并未携带助理或保镖面对突如其来的热情显得

樊振东自己并未携带助理或保镖面对突如其来的热情显得有些措手不及他试图向粉丝解释希望坚持次第但收效甚微

OK,到此完毕,希望对大家有所协助。

标签:

克鲁斯卡尔算法求最小生成树...请区分按Prim算法和Kruskal算法求最小生成树.推荐新闻

天下足球

更多

篮球公园

更多