图论之prim算法
存一下prim算法模板
def prim(v,e,edges):
import sys
grid=[[10001]*(v+1) for _ in range(v+1)]
for edge in edges:
x,y,k=edge
grid[x][y]=k
grid[y][x]=k
minDist=[10001]*(v+1)
isInTree=[False]*(v+1)
for i in range(1,v):
cur=-1
minVal=sys.maxsize
for j in range(1,v+1):
if not isInTree[j] and minDist[j]<minVal:
minVal=minDist[j]
cur=j
isInTree[cur]=True ###这一循环是用来找生成树节点(只要找一个就行)
for j in range(1,v+1):
if not isInTree[j] and grid[cur][j]<minDist[j]:
minDist[j]=grid[cur][j]###这一循环是用来更新非生成树节点到生成树节点的最小值
result=sum(minDist[2:v+1])
return result
if __name__=="__main__":
import sys
input=sys.stdin.read
data=input().split()
index=0
v=int(data[index])
index+=1
e=int(data[index])
index+=1
edges=[]
for _ in range(e):
x=int(data[index])
index+=1
y=int(data[index])
index+=1
k=int(data[index])
index+=1
edges.append([x,y,k])
result=prim(v,e,edges)
print(result)

浙公网安备 33010602011771号