最小生成树问题之Prim算法
算法步骤
Python代码
import numpy as np
def prim(D):
# D是图的带权邻接矩阵
# 计算D的顶点数
N = D.shape[0]
# 取出所有的边权对
edge = []
for i in range(N - 1):
for j in range(i + 1, N):
if D[i, j] != np.inf:
edge.append([i, j, D[i, j]])
# 按从权从上到下递增的顺序排列边权对数据edge
edge = sorted(edge, key=lambda k: k[2])
# 赋予最小生成树边权集合初始值
tree_point = [edge[0][0], edge[0][1]]
tree = [edge[0]]
edge.remove(edge[0])
# 初始化边的两个端点都暂时不在目前子树的集合
tree_store = []
# 算法迭代主体
while tree.__len__() < (N - 1):
# 取出当前最短的边
t1, t2 = edge[0][0] in tree_point, edge[0][