与prim算法一样,Kruskal算法也是为了图的最小生成树而产生的算法,改算法规定,先将所有边的权值按照小到大排序,每条边的起点和终点也需要加上,先从权值最小的边开始连接,每次连接前判断需要连接的顶点是否会导致树变成环,如果会导致这种情况,则跳过该边,进行下一条边的判定,直到获取该无向加权图的最小生成树。
如下图:
最小生成树-Kruskal(克鲁斯卡尔)算法解析
首先先建表观察

begin end weight
edges[0] 3 4 5
edges[1] 5 7 6
edges[2] 1 4 7
edges[3] 0 2 8
edges[4] 3 6 8
edges[5] 0 1 9
edges[6] 2 3 10
edges[7] 3 7 11
edges[8] 2 5 12
edges[9] 6 7 12
edges[10] 0 3 13
edges[11] 4 6 15

(1)V3V4=5,所以选出顶点V3、V4;
(2)V5V7=6,所以选出顶点V3、V4、V5、V7;
(3)V1V4=7,V4已存在,所以选出顶点V3、V4、V5、V7、V1;
(4)V0V2=8,所以选出顶点V3、V4、V5、V7、V1、V0、V2;
(5)V0V1=9,V0、V1已存在,所以选出顶点V3、V4、V5、V7、V1、V0、V2;
(6)V2V3=10,由于该边连接会导致形成环,所以跳过,不选该边;
(7)V3V7=11,V3、V7已存在,所以选出顶点V3、V4、V5、V7、V1、V0、V2;此时已经将所有顶点都连通;
最终生成的最小生成树如下图红色边连接的顶点构成的树,计算总权值为8+9+7+5+8+11+6=54
最小生成树-Kruskal(克鲁斯卡尔)算法解析

相关文章: