1、算法设计
什么是Kurskal算法?
假设 G = (V,E)是无向连通带权图,V = {1,2,……,n};设最小生成树 T = (V , TE),该树的初始状态为只有 n 个顶点而无边的非连通图 T = (V , { }),Kurskal算法将这 n 个顶点看成是 n 个独立的连通分支。
它首先将所有的边按权值从小到大排序,然后只要 T 中选中的边数不到 n-1 ,就做如下贪心选择:
在边集 E 中选取权值最小的边 (i , j),如果将边 (i , j)加入集合 TE 中不产生回路,就将该边加入边集 TE 中,即用边 (i , j) 将这两个连通分支合并连接成一个连通分支;否则继续选择下一条边。将边 (i , j) 从集合 E 中删去。继续上面的贪心选择,直到 T 中所有顶点都在同一个连通分支上为止。此时,选取到的 n-1 条边恰好构成 G 的一颗最小生成树 T 。
Kurskal算法的步骤:
步骤 1:初始化。将图中 G 的边集 E 中的所有边按权值从小到大排序,边集 TE = { },将每一个点都初