1.构建Kruskal函数,形参为图的邻接矩阵MGraph g,图的边的集合Road road[],生成数最后的权值int * sum
2.定义变量:并查集数组vset[maxSize](用来判断图中是否存在回路)、循环变量i、图的顶点数n、图的边数e、两个根节点变量a和b(边的两个顶点所在生成树的根结点)
3.将并查集数组初始化:将每个结点看做一棵独立的树,其根节点为自身
4.将边的集合按照权值从小到大排序
5.做一个循环:
1)依次从边集中取出一条边
2)寻找边的两个顶点所在树的根节点,赋值给a和b,
3)判断a和b是否相等:如果相等说明这条边加进生成树中会构成回路,返回1);如果不相等,说明不构成回路,继续第4)步
4)将a所在的生成树与b所在的生成树并成一棵新树。因为a和b都是所在树的根结点,所以只需将b作为新树的根节点将a并入即可:vset[a] = b;(更通俗一点,vset[a] = b 写成parent[a] = b,即a的双亲为b,是树的存储结构中的双亲表示法)
5)计算树的权值sum += road[i].weight 。(这里也可以输出生成树的边,写法不是固定的)
注:对应知识点在天勤书P195-P197。