题目描述:还是畅通工程
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
输入描述:
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100
);随后的N(N-1)/2行对应村庄间的距离,
每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。
为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
输出描述:
对每个测试用例,在1行里输出最小的公路总长度。
算法分析:最小生成树至少包含一个最小边;每次找最小的边;
若成环,则丢弃,继续遍历下一个边
(判断是否会成环:若边两点属于一个集合,)
反证:若一个最小生成树,不包含最小边
用最小边,替换其中一条边,得到的更小的生成树(则矛盾)
代码实现:
易错细节:1.min1的大小应该大于n*(n-1)/2
(1)虽然数组开小了,但没说明内存问题(很难发现)