图论之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)
posted @ 2026-06-01 23:52  zidurile  阅读(13)  评论(0)    收藏  举报