(注:此贴是为了回答同事提出的一个问题而匆匆写就,算法代码只求得出答案为目的,效率方面还有很大的改进空间)
最小生成树是指对于给定的带权无向图,需要生成一个总权重最小的连通图。
其问题描述及算法可以详见:https://en.wikipedia.org/wiki/Minimum_spanning_tree
以下我选用其中一个简单的算法描述,编写 Python 代码尝试解决此问题。
下面是同事提出的问题的原图:
程序:
1 # coding: utf-8 2 3 from sets import Set 4 5 def edge_name(v1, v2): 6 if v1 < v2: 7 return v1 + v2 8 return v2 + v1 9 10 11 # Prim algorithm 12 def mst(vectors, costs, vectors_in_g, edges_in_g): 13 if len(vectors) == len(vectors_in_g): 14 return (vectors_in_g, edges_in_g) 15 16 min_cost = max(costs.values()) + 1 17 remaining_vectors =