介绍:


前言:
这道题要求我们在 N 个星球之间建造 N - 1 条隧道,使得所有星球能够直接或间接连接,并且建造隧道的价格为两个星球在 x ,y zf 三个维度上差值的绝对值为最小值,最终要找出完成任务所需的最小总价值,主要是利用 MST(最小生成树) 算法来解决,下面是小亦为大家的详细讲解:
#解题思路:
1、最小生成树概念:
对于一个具有 N个定顶点的连通图时,其最小生成树是一个包含图中所有顶点而且边数为 N - 1 的无环子图,并且该子图的边权之和最小。在这道题里,每个星球都是图的顶点,星球之间的隧道是边,隧道的讲个事边的权值。我们的主要目标就是找到这个图的最小生成树,其边权之和呢就是最小总价。
2、使用 Kruskal 算法:
2.1、由于我们需要计算任意两个星球之间所建造隧道的价格。为了减少我们的计算量,我们按找 x , y , z 坐标对星球进行排序。
2.2、对于按照每个维度排好序的星球序列,计算相邻星球之间的边。例如在按照 x 坐标后,计算相邻星球在 x 维度上的距离 abs(x[ i ].first - x[ i + 1 ].first)作为边的权值并将这条边记录起来。对 y 和 z 维度也进行相同的操作。
2.3、对边按权值排序:将所有计算得到的边放入一个集合当中,然后使用 sort 函数对这些边按照权值从小到大进行排序。目的就是为了在后续的步骤中,能够悠闲选择权值最小的边来构建成最小生成树。
2.4、利用并查集构建成最小生成树:
初始化并查集,每个星球的父节点初始化为自身,表示每个星球都独立成每个集合。
遍历排序后的边集合,对于每条边,需检查其两个断电是否是同一个集合。如果不是,说明不会形成环,那就将这条边加入到生成树当中,丙类加上这个条边的权值到总价格 cost当中,同属边的数量 + 1 。
当边的数量达到 n - 1 时,那就说明生成树已经构建完成啦~此时的总价就是完成任务所需的最小总价了。
3、输出结果:
最后的最后,将计算得到的最小总价输出,就做完了啊。
##复杂度:
1、时间复杂度:
。
2、空间复杂度:
。
###代码:
!!!声明!!!由于时间更新有限,代码提供将会在后期再放上去,谅解!!!
感谢观看!!!
制作:Code.小亦
代码提供:Code.小亦
题目思路部分提供:无
代码部分思路提供:无
初审:Code.小亦。
终审:Code.小亦
本文章属于原创作品,禁止任何人进行转载,除合作之外!!
960

被折叠的 条评论
为什么被折叠?



