与prim算法一样,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