AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

AcWing 858. Prim算法求最小生成树-python    原题链接    简单

作者: 作者的头像   Actor丶 ,  2020-02-25 09:12:42 ,  阅读 447


4


def prim():
    dist = [float("inf") for i in range(n+1)]    # 记录每个结点到连通块的距离
    st = [False for i in range(n+1)]    # 标记节点是否在连通块中
    res = 0

    for i in range(1, n+1):
        t = 0
        for j in range(1,n+1):    # 未访问过的寻找距离连通块距离最近的节点
            if st[j]==False and (t==0 or dist[t]>dist[j]):
                t = j

        if t==0 and dist[t]==float("inf"): return float("inf")    # 如果上面的for循环没有找到距离连通块最近的点
        if t!=1:    # 如果节点t不是第一个点,就将t到连通块的距离加到res中;!!!注意,res的加和操作一定放在更新距离操作之前,否则加和一定是0
            res += dist[t]
        for j in range(1,n+1):   # 更新所有节点到连通块的距离,其中dist[t]更新为0
            dist[j] = min(dist[j], graph[t][j])
        st[t] = True
    return res

# 输入示例
if __name__=="__main__":
    n, m = map(int, input().split())
    # 邻接矩阵存无向图
    graph = [[float("inf") for i in range(n+1)] for j in range(n+1)]

    while m:
        u, v, w = map(int, input().split())
        graph[u][v] = graph[v][u] = min(graph[u][v], w)    # 存储无向图的邻接矩阵
        m -= 1

    for i in range(1, n+1): 
        graph[i][i] = 0

    res = prim()

    print("impossible") if res>=float("inf")/2 else print(res)

1 评论


用户头像
xanxus1111   9个月前     回复

float(“inf”)/2 这个没有啥意义呐

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息