再畅通工程(最小生成树)

题目描述:还是畅通工程

某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。

输入描述:

测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100
);

随后的N(N-1)/2行对应村庄间的距离,

每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。

为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。

输出描述:

对每个测试用例,在1行里输出最小的公路总长度。

 算法分析:最小生成树至少包含一个最小边;每次找最小的边;

若成环,则丢弃,继续遍历下一个边

(判断是否会成环:若边两点属于一个集合,)

反证:若一个最小生成树,不包含最小边

     用最小边,替换其中一条边,得到的更小的生成树(则矛盾)

代码实现:

再畅通工程(最小生成树)_第1张图片

 再畅通工程(最小生成树)_第2张图片

易错细节:1.min1的大小应该大于n*(n-1)/2

(1)虽然数组开小了,但没说明内存问题(很难发现)

 再畅通工程(最小生成树)_第3张图片

 

再畅通工程(最小生成树)_第4张图片

 

 

 

 

 

 

你可能感兴趣的:(数据结构,数据结构)