Python 实现【最小传输时延I】

liftword4周前 (04-27)技术文章9
import heapq

def min_delay(N, M, times, src, dst):
    # 构建邻接表
    graph = [[] for _ in range(N + 1)]
    for u, v, w in times:
        graph[u].append((v, w))
    
    # 初始化距离数组
    dist = [float('inf')] * (N + 1)
    dist[src] = 0
    
    # 使用优先队列(最小堆)
    heap = [(0, src)]
    
    while heap:
        current_dist, u = heapq.heappop(heap)
        if u == dst:
            return current_dist
        if current_dist > dist[u]:
            continue
        for v, w in graph[u]:
            if dist[v] > dist[u] + w:
                dist[v] = dist[u] + w
                heapq.heappush(heap, (dist[v], v))
    
    return -1

# 读取输入
N, M = map(int, input().split())
times = []
for _ in range(M):
    u, v, w = map(int, input().split())
    times.append((u, v, w))
src, dst = map(int, input().split())

# 计算并输出结果
result = min_delay(N, M, times, src, dst)
print(result)

解决思路

这是一个典型的单源最短路径问题,可以使用以下算法:

  1. Dijkstra算法:适用于非负权边的图,时间复杂度为O(M + N log N)。
  2. Bellman-Ford算法:适用于一般情况(包括负权边,但本题无负权边),时间复杂度为O(N*M)。
  3. SPFA算法:Bellman-Ford的优化版本,平均时间复杂度为O(M),最坏情况下为O(N*M)。

由于题目中时延为非负数(0 ≤ w ≤ 100),Dijkstra算法是最优选择。


相关文章

python学习——028pop方法是如何移除不同数据结构中的元素

在 Python 里,pop 是个常用方法,不同的数据类型中 pop 方法的参数情况存在差异,下面介绍在列表(list)、字典(dict)和集合(set)里 pop 方法。列表(list)的pop方法...

python中字典使用pop和使用del的区别

在 Python 中,字典是一种键值对数据结构,其中每个键(key)都与一个值(value)相关联。在操作字典时,通常需要删除字典中的某些键值对。在 Python 中,有两种方法可以从字典中删除键值对...

python学习——030pop 方法从列表中移除多个元素

若要使用 pop 方法从列表中移除多个元素,可依据具体的移除需求采用不同的策略,下面介绍几种常见的情况及对应的实现方式。按索引移除多个不连续的元素若要移除的元素索引是不连续的,可按索引从大到小的顺序依...

用Python写了一个上课点名系统(附源码)(自制考勤系统)

今天刷到了一个这样的短视频,我寻思我是不是也可以写一个类似的上课点名程序,想法经不起等待,说写就写~一.准备工作私信小编01即可获取大量Python学习资源1.TkinterTkinter 是 pyt...

Python数据分析师使用低代码Streamlit实现Web数据可视化方法

Python数据分析师工作拓展助手,在不用掌握复杂的HTML、JavaScript、CSS等前端技术的情况下,也能快速做出来一个炫酷的Web APP,把数据分析结果可视化呈现出来!本文推荐Python...

Python中`yield`关键字:揭开生成器与迭代的神秘面纱

在Python编程世界里,yield关键字是一个非常重要且有趣的存在,它与生成器、迭代等概念紧密相关。Stack Overflow上关于 “Python中yield关键字有什么作用?” 的问题讨论热度...