[华为OD] 最小传输时延(dijkstra算法)

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

明天就要面试了我也太紧张了吧

但是终于找到了一个比较好理解的dijkstra的python解法,让我快点把它背下来!!!!

题目

先把题目放出来

某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示,其中题的边的值表示结点之间的消息传递时延。现给定相连节点之间的时延列表 times[i] = {u,v,w},其中u表示源节点,v表示目的节点,w表示u和v之间的消息传递时延。
请计算给定源结点到目的结点的最小传输时延,如果目的结点不可达,返回-1。

输入描述:
输入的第一行为两个正整数,分别表示网络结点的个数N以及时延列表长度M,用空格分隔。
接下来的M行为两个结点间的时延列表[u,v,w]
输入的最后一行为两个正整数,分别表示源结点和目的结点。

比如:

输入 3 3
1 2 11
2 3 13
1 3 50
1 3
输出 24

一个有向无环图,用dfs也很好做。这里我们重点看一下dijkstra怎么做。

dijkstra算法的python实现

最短路径算法Dijkstra,主要思想是贪心。每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。
更具体地来说:
假设我们现在在一个有权图中,图中有n个点,点与点相连的路径上都分配有权重,代表了两点之间的距离。现在有一个起始点i,终点j,如果求i到j的最短距离。

  1. 我们建立一个集合s,把起始点i放进去,然后在与i相邻的边中寻找与i距离最近的点,并把这个点放到集合中去。
  2. 然后第二次遍历与集合中的点相连的点,并更新到起始点的距离,并把距离起始点i最近的点放到集合中去。
  3. 继续上面的做法,每次都在集合中添加一个点。直到没有新的点可以添加进去。

我们来写一个比较简单的python实现。
假设现在有n个节点,同时有一个输入distance距离列表,里面的元素表示的是[u,v,w]即u到v的距离。现在给定起点k,求k到最远的点的最小距离

dist = [float('inf')]*n # 构建一个列表存放n个结点到目标k的距离
dist[k-1] = 0  # 第k个结点到他本身的距离为0

g = [[float('inf')] * n for _ in range(n)] # 构建一个矩阵,表示n个结点彼此的距离。
for x, y, dis in distance:
	g[x-1][y-1] = time  # 按照distance列表更新矩阵中两两结点的距离。

used = [False]*n # 判断点是否已经加入了set里面。

for _ in range(n):
	x = -1
	for y, u in enumerate(used):
		if 
华为OD机试真题2023B卷 JS】最小传输时延 标题:最小传输时延| 某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示,其中图的边的值表示结点之间的消息传递时延。现给定相连节点之间的时延列表times[i]={u,v,w},其中u表示源结点,v表示目的结点,w表示u和v之间的消息传递时延。请计算给定源结点到目的结点的最小传输时延,如果目的结点不可达,返回-1。............ 阅读详情

相关推荐

华为OD机试 - 最小传输时延 - Dijkstra算法(Java 2025 B卷 200分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。请计算给定源节点到目的节点的最小传输时延,如果目的节点不可达,返回-1。网络通过一个有向无环图表示,其中图的边的值表示结点之间的消息传递时延。,u表示源节点,v表示目的节点,w表示u和v之间的消息传递时延。第一行输入两个正整数,表示网络节点的个数N,M,用空格分割;最后一行输入两个正整数,u表示源节点,v表示目的节点;输出一个整数,表示源节点到目的节点的最小时延。所以源节点1到目的节点5的最小时延是25。

学Java,找哪吒 703

华为机试:最小传输时延

华为机试:最小传输时延

小朱小朱绝不认输的博客 3394

华为OD机试 - 最小传输时延 - Dijkstra算法(Python/JS/C/C++ 2025 A卷 200分)

使用邻接表来表示有向图,其中graph.get(u)存储所有从节点u出发的边,每条边以int[]数组形式存储目的节点和时延。请计算给定源节点到目的节点的最小传输时延,如果目的节点不可达,返回-1。,u表示源节点,v表示目的节点,w表示u和v之间的消息传递时延。路径1→3→2→4的总时延为1 + 1 + 2 = 4。输出一个整数,表示源节点到目的节点的最小时延。路径1→2→3的总时延为4 + 5 = 9。路径1→2→4的总时延为3 + 2 = 5。路径1→3→4的总时延为1 + 4 = 5。

学Java,找哪吒 810

华为OD机试真题 2025B卷】227、最小传输时延 | 机试真题+思路参考+代码分析(C++、Java、Py、C语言、JS)

题目描述 >某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示,其中图的边的值表示结点之间的消息传递时延 >  现给定相连节点之间的时延列表times[i]={u,v, w},其中u表示源结点,v表示目的结点,w表示u和v之间的消息传递时延 >  请计算给定源结点到目的结点的最小传输时延,如果目的结点不可达,返回-1 > 

KJ.JK 1万+

华为OD机试 - 最小传输时延问题(C++、Java、JavaScript)

在这道题目中,我们通过使用 Dijkstra 算法解决了一个关于最短路径的经典问题。无论是 C++、Java、还是 JavaScript,实现方式上都非常相似,核心在于如何使用优先队列来优化最短路径的求解过程。在不同语言中,API 和数据结构的使用稍有不同,但本质的算法逻辑是一致的。

m0_57781768的博客 307

华为OD机考2025B卷 - 最小传输时延Ⅰ(Java & Python& JS & C++ & C )

华为OD机考2025B卷 - 最小传输时延Ⅰ(Java & Python& JS & C++ & C )

算法大师! 114

华为OD机试 - 最小传输时延(Java)

现给定相连节点之间的时延列表times[i]={u,v,w},其中u表示源结点,v表示目的结点,w表示u和v之间的消息传递时延。网络通过一个有向无环图表示,其中图的边的值表示结点之间的消息传递时延。输入的第一行为两个正整数,分别表示网络结点的个数N,以及时延列表的长度M,用空格分隔;请计算给定源结点到目的结点的最小传输时延,如果目的结点不可达,返回。输入的最后一行为两个正整数,分别表示源结点和目的结点。接下来的M行为两个结点间的时延列表[u v w];的变种题,逻辑几乎一致,题目解析请参考链接博客。

qq_34143141的博客 339

华为OD机试真题】最小传输时延 HUAWEI(C++&java&python&go)100%通过率【2023(B卷)200分】

已支持(C++&java&python&go)100%通过率【2023(B卷)200分】

笑着的程序员的博客 306

华为OD机试真题 C语言】227、最小传输时延 | 机试真题+思路参考+代码分析

某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示,其中图的边的值表示结点之间的消息传递时延 >  现给定相连节点之间的时延列表times[i]={u,v, w},其中u表示源结点,v表示目的结点,w表示u和v之间的消息传递时延 >  请计算给定源结点到目的结点的最小传输时延,如果目的结点不可达,返回-1 > 

KJ.JK 3735

华为OD机试真题 Python语言】227、最小传输时延 | 机试真题+思路参考+代码分析

某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示,其中图的边的值表示结点之间的消息传递时延 >  现给定相连节点之间的时延列表times[i]={u,v, w},其中u表示源结点,v表示目的结点,w表示u和v之间的消息传递时延 >  请计算给定源结点到目的结点的最小传输时延,如果目的结点不可达,返回-1 >  --- ### 🎃输入输出 > 输入 输入的第一行为两个正整数,分别表示网络结点的个数N,以及时延列表的长度M,用空格分隔; 接下来的M行

KJ.JK 2848

华为机试】【BFS】【Java】最小传输时延

如有问题请留言更正。 ■ 题目描述 【最小传输时延】 有MN的节点矩阵,每个节点可以向8个方向(上、下、左、右及四个斜线方向)转发数据包,每个节点转发时会消耗固定时延, 连续两个相同时延可以减少一个时延值(即当有K个相同时延的节点连续转发时可以减少K- 1个时延值), 求左上角(0,0)开始转发数据包到右下角(M-1,N- 1)并转发出的最短时延。 输入描述 第一行两个数字,M、N,接下来有M行,每行有N个数据,表示M N的矩阵。 输出描述 最短时延值。 示例1 输入输出示例仅供调试,后台判题数据一般不

Twiss的博客 1558

华为od机试-最小传输时延

对于每个节点,它的周围八个方向都可以作为下一个节点进行转发,每次选择时延最小的节点进行转发,并更新其周围节点的时延值。需要注意的是,连续相同时延会减少时延值,因此需要记录当前连续相同时延的个数。有 M*N 的节点短阵,每个节点可以向 8 个方向(上、下、左、右及四个斜线方向)转发数据包,每个节点转发时会消耗固定时延,连续两个相同时延可以减少一个时延(即当有K 个相同时延的节点连续转发时可以减少 K-1 个时延),求左上角 (0,0)开始转发数据包到右下角 (M-1,N- 1)并转发出的最短时延

fightingtt的博客 396

华为OD机试】最小传输时延I【2023 B卷|200分】

某通信网络中有N个网络结点,用1到N进行标识。网络通过一个有向无环图表示, 其中图的边的值表示结点之间的消息传递时延

goldarmour的博客 622

华为OD机试 C++【最小传输时延Ⅱ】

现在,有技巧:如果连续两个格子的延迟时间相同,那么我们只算一个时间(比如从一个格子到下一个格子需要2个时间单位,但如果它们都标了2,那么只需要1个时间单位)。想象一个M*N的大网格,每个格子上都有一个数字。这个数字就是这个格子转发数据的延迟时间。每个格子可以向其周围的8个方向(上、下、左、右以及四个角落)发送数据。请问,从网格的左上角到右下角,数据包最快需要多少时间?接下来M行,每行有N个数字,构成M*N的网格。首行是两个数字M和N,代表网格的大小。从左上角到右下角所需的最短时间。

wtswts1232的博客 421

2021.10.24 力扣-网络延迟时间-关于最短路径的几种算法

题目描述: 有 n 个网络节点,标记为1到 n。 给你一个列表times,表示信号经过 有向 边的传递时间。times[i] = (ui, vi, wi),其中ui是源节点,vi是目标节点, wi是一个信号从源节点传递到目标节点的时间。 现在,从某个节点K发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回-1 。 方法一(朴素dijkstra算法): class Solution { public: const int inf = IN...

销夜的博客 822

华为OD机试真题-最小传输时延-2023年OD统一考试(B卷)

现给定相连节点之间的时延列表times[i]={u,v,w},其中u表示源结点,v表示目的结点,w表示u和v之间的消息传递时延。请计算给定源结点到目的结点的最小传输时延,如果目的结点不可达,返回-1。2、时延列表times的长度不超过6000,且1

YOLO 153
上一篇: 第二十一章 数据处理篇:imgaug
下一篇: 第二十二章 原理篇:UP-DETR
江米江米
博客等级 码龄9年 80粉丝 49原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值