prim算法
1. 点集初始化为 {v1}。
2. 寻找离点集距离最小的点min Min[k],加入点集B[k]=False。
3. 如果不是顶点,权重+ = Min[k]。
4. 如果不是初始顶点,就更新其他点的距离。
global MAX
# 最小生成树,蓝白点思想
def prim(W):
# 优化
weight = 0
B = [True for i in range(len(W))]
Min = [MAX, MAX, MAX, MAX, MAX]
for i in range(len(W)):
k = 0
# 蓝白点转换
for j in range(len(W)):
if Min[j] < Min[k] and B[j]: # Min[k]记录最小值
k = j #定位到距离最小的点
B[k] = False
if k != 0:
weight += Min[k]
# 更新权重
for p in range(len(W)):
if Min[p] > W[k][p] and B[p]:
Min[p] = W[k][p]
# 返回权重
return weight
if __name__ == "__main__":
MAX = 10000
W = [[MAX,2,5,2,MAX],
[2,MAX,3,MAX,3],
[5,3,MAX,1,6],
[2,MAX,1,MAX,MAX],
[MAX,3,6,MAX,MAX]]
print(prim(W))