【代码随想录算法训练营——Day59】图论——47.参加科学大会、94.城市间货物运输I

卡码网题目链接

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

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

题解
47.参加科学大会(堆优化版)





代码竟然改写对了,本来以为没希望的.再观察了一下题解的代码写的也很好,仔细看一下.

94.城市间货物运输I

一开始改动的代码超时了,仿照题解的python代码加了退出逻辑,且要写在第一层循环里面.

代码

python 复制代码
#47.参加科学大会(堆优化版)
import heapq
class Edge:
    def __init__(self, to, val):
        self.to = to
        self.val = val
    # 定义小于操作,用于堆比较
    def __lt__(self, other):
        return self.val < other.val  # 小顶堆:值小的优先

if __name__ == "__main__":
    n, m = map(int, input().split())
    graph = [[] for _ in range(n + 1)]  # 邻接表
    for _ in range(m):
        s, e, v = map(int, input().split())
        graph[s].append(Edge(e, v))
    start = 1
    end = n
    minDist = [float('inf')] * (n + 1)
    visited = [False] * (n + 1)
    heap = []
    heapq.heappush(heap, Edge(start, 0))
    minDist[start] = 0
    while heap:
        cur = heapq.heappop(heap)
        if visited[cur.to]:
            continue
        visited[cur.to] = True
        for edge in graph[cur.to]:
            if visited[edge.to] == False and minDist[cur.to] + edge.val < minDist[edge.to]:
                minDist[edge.to] = minDist[cur.to] + edge.val
            heapq.heappush(heap, Edge(edge.to, minDist[edge.to]))
    if minDist[end] == float('inf'):
        print(-1)
    else:
        print(minDist[end])
    


python 复制代码
#94.城市间货物运输I
n, m = map(int, input().split())
graph = []
for _ in range(m):
    graph.append(list(map(int, input().split())))
start = 1
end = n
minDist = [float('inf')] * (n + 1)
minDist[start] = 0
for i in range(1, n):
    updated = False
    for j in range(len(graph)):
        fromm, to, price = graph[j][0], graph[j][1], graph[j][2]
        if minDist[fromm] != float('inf') and minDist[to] > minDist[fromm] + price:
            minDist[to] = minDist[fromm] + price
            updated = True
    if not updated:  # 若边不再更新,即停止回圈
        break
if minDist[end] == float('inf'):
    print("unconnected")
else:
    print(minDist[end])
相关推荐
艾醒39 分钟前
大模型原理剖析——拆解预训练、微调、奖励建模与强化学习四阶段(以ChatGPT构建流程为例)
算法
冷崖1 小时前
排序--基数排序
c++·算法
F_D_Z1 小时前
哈希表解Two Sum问题
python·算法·leetcode·哈希表
Aaron15881 小时前
基于RFSOC+VU13P+GPU架构在雷达电子战的技术
人工智能·算法·fpga开发·架构·硬件工程·信号处理·基带工程
LYFlied1 小时前
【每日算法】LeetCode124. 二叉树中的最大路径和
数据结构·算法·leetcode·面试·职场和发展
talenteddriver2 小时前
java: Java8以后hashmap扩容后根据高位确定元素新位置
java·算法·哈希算法
跨境猫小妹2 小时前
2025 TikTok Shop:从内容爆发到系统化深耕的商业跃迁
大数据·人工智能·算法·产品运营·亚马逊
不穿格子的程序员2 小时前
从零开始写算法 —— 二叉树篇 1:二叉树的三种遍历(递归实现法)
算法·深度优先·二叉树遍历·fds
子夜江寒3 小时前
逻辑森林与贝叶斯算法简介
算法·机器学习
xu_yule3 小时前
算法基础-背包问题(01背包问题)
数据结构·c++·算法·01背包