一,大致的遍历过程图解及过程讲解
总连通网如右下角所示。
从所有权值中找到最小值,若不连通,则添加该边无回路则正确
1,如下图(a),先找到最小边AC,加入;
2,图(b),找到下一个最小边DF,加入;
3,图(c),图(d),按照大小排序,一次找到BE,CF加入;
4,图(e),因为有三个边的长度都为5,但是由图可知,当AD或者CD加入时,都会产生回路,而BC正好合适,所以BC加入
二,实现方法
第一步:构造邻接矩阵,只不过这保存方法与前面不同.
只需要构造一个能够保存每条边起点Head终点Tail和权值lowcost的结构体数组。
第二步:将上面构造的结构体数组进行从小到大排序。
本文代码运用的是归并排序https://blog.csdn.net/qq_46423166/article/details/105493704
也可以用冒泡排序,插入排序,选择排序,快速排序都等可以,可以看以往博客。
但是这里注意交换值的时候一次要交换结构体里面的所有值。我这里一次就要交换Head,Tailm,lowcast三个的值
eg: S1[k].lowcost = S[i].lowcost;
S1[k].Head = S[i].Head;
S1[k].Tail = S[i].Tail;(将S[i]的值赋给S1[k])
第三步:进行克鲁斯卡尔算法
即再将上面排序好的结构体数组进行遍历,符合要求即输出。
此时需要判断的就是加入某一边,是否会产生环,所以加入一个新