说明:
各位大佬,这篇文章是小弟两年前写的,才疏学浅,那时是当做一道面试题来做的,解决办法和正确性证明都是我自己想出来的。两年过去我已成长不少,原来这类问题叫做「最小生成树问题」,而我用的解法叫做「Prim 算法」,在 CLRS 中都有讲解。
未曾想此文今日还有人评论,故作此说明,方便想深挖的朋友按图索骥。——20201029
以下为原文↓↓
Python3.6.3
如下图所示,平面上有一些点,需要将所有点连起来,使任何一个点都可以和其他点连通(直接或间接),且连接线段长度总和最短。
例:下面的四个点,相互连通,并且总长度是最短的。
思路:共有n个点,最短连线集合f(n)一定存在。
假设有m (1≤m<n)个点,它们的最短连线集合是f(m),并且满足在f(n)中这m个点的连线也可以是f(m)。
计算剩余n-m个点与m个点的距离,最短的那条就是要求的下一条连线。