你是空间站工程团队的一员,负责空间站建设过程中的某项任务。你需要写一个程序来完成这项工作。
空间站由若干个单元组成,称为“细胞”。所有细胞都是球形,但大小不一定相同。每个细胞在空间站成功进入轨道后,会固定在预定位置。奇怪的是,两个细胞可能会相互接触,甚至重叠。极端情况下,一个细胞甚至可能完全包裹另一个。我也搞不懂这些奇葩的排列是怎么做到的。
所有细胞必须连通,因为船员需要能从任意一个细胞走到另一个细胞。具体来说,如果满足以下条件之一,船员就能从细胞 A 走到细胞 B:
- A 和 B 彼此接触或重叠;
- A 和 B 之间有一条“走廊”连接;
- 存在一个细胞 C,使得从 A 到 C 和从 B 到 C 都能走通。这里条件(3)是传递的。
你的任务是设计走廊的连接方案,也就是决定哪些细胞对之间要建走廊。走廊的设计有一定自由度。比如有三个细胞 A、B、C,它们彼此不接触也不重叠,至少有三种方案可以让它们连通:第一种是建走廊 A-B 和 A-C,第二种是 B-C 和 B-A,第三种是 C-A 和 C-B。建造走廊的费用跟长度成正比,所以你得选一套总走廊长度最短的方案。
你可以忽略走廊的宽度。走廊连接的是两个细胞表面上的点,长度可以任意长,但当然要选最短的那条。即使两条走廊 A-B 和 C-D 在空间中相交,也不算它们之间形成了通路。换句话说,你可以认为走廊之间永远不会相交。