【代码随想录算法训练营——Day57(Day56周日休息)】图论——53.寻宝

卡码网题目链接

https://kamacoder.com/problempage.php?pid=1053

题解

53.寻宝

本题是模板题, 代码是仿照题解里的c++代码写出来的. prim和kruskal都是.

代码

python 复制代码
#53.寻宝
#prim法
if __name__ == "__main__":
    v, e = map(int, input().split())
    graph = [[10001] * (v + 1) for _ in range(v + 1)]
    for _ in range(e):
        x, y, k = map(int, input().split())
        graph[x][y] = k
        graph[y][x] = k
    minDist = [10001] * (v + 1)
    isInTree = [False] * (v + 1)
    for i in range(1, v): # n - 1条边连接n个结点
        cur = -1
        minVal = float('inf')
        for j in range(1, v + 1):
            if isInTree[j] == False and minDist[j] < minVal:
                cur = j
                minVal = minDist[j]
        isInTree[cur] = True
        for j in range(1, v + 1):
            if isInTree[j] == False and graph[cur][j] < minDist[j]:
                minDist[j] = graph[cur][j]
    result = 0
    for i in range(2, v + 1):
        result += minDist[i]
    print(result)

#kruskal法
class Edge:
    def __init__(self, l, r, val):
        self.l = l
        self.r = r
        self.val = val

n = 10001
father = [-1] * n

def init():
    for i in range(n):
        father[i] = i
def find(u):
    if father[u] == u:
        return u
    else:
        father[u] = find(father[u])
        return father[u]
def isSame(u, v):
    u = find(u)
    v = find(v)
    return u == v
def join(u, v):
    u = find(u)
    v = find(v)
    if u == v:
        return
    father[v] = u

if __name__ == "__main__":
    v, e = map(int, input().split())
    result = 0
    edges = []
    for _ in range(e):
        v1, v2, val = map(int, input().split())
        edges.append(Edge(v1, v2, val))
    edges.sort(key = lambda x: x.val)
    init()
    for edge in edges:
        x = find(edge.l)
        y = find(edge.r)
        if x != y:
            result += edge.val
            join(x, y)
    print(result)
相关推荐
摇摆的含羞草3 分钟前
哈希(hash)算法使用特点及常见疑问解答
算法·哈希算法
仰泳的熊猫38 分钟前
1077 Kuchiguse
数据结构·c++·算法·pat考试
LYFlied1 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
踏浪无痕1 小时前
计算机算钱为什么会算错?怎么解决?
后端·算法·面试
夏乌_Wx1 小时前
练题100天——DAY28:找消失的数字+分发饼干
数据结构·算法
studytosky2 小时前
深度学习理论与实战:反向传播、参数初始化与优化算法全解析
人工智能·python·深度学习·算法·分类·matplotlib
WolfGang0073212 小时前
代码随想录算法训练营Day48 | 108.冗余连接、109.冗余连接II
数据结构·c++·算法
努力学算法的蒟蒻2 小时前
day35(12.16)——leetcode面试经典150
算法·leetcode·面试
cccc来财3 小时前
角点检测算法:Harris 和 FAST 方法
算法·计算机视觉·特征提取
风中月隐3 小时前
C语言中以坐标的方式图解“字母金字塔”的绘制
c语言·开发语言·算法·字母金子塔·坐标图解法