一、题目描述
某通信网络中有N个网络节点,用1到N进行标识。
网络通过一个有向无环图表示,其中图的边的值表示结点之间的消息传递时延。
现给定相连节点之间的时延列表times[i] = {u,v,w}
,u表示源节点,v表示目的节点,w表示u和v之间的消息传递时延。
请计算给定源节点到目的节点的最小传输时延,如果目的节点不可达,返回-1。
二、输入描述
第一行输入两个正整数,表示网络节点的个数N,M,用空格分割;
下面的M行表示两个节点之间的时延列表{u,v,w}
;
最后一行输入两个正整数,u表示源节点,v表示目的节点;
三、输出描述
输出一个整数,表示源节点到目的节点的最小时延。
四、解题思路
- 定义一个时延列表{u,v,w}的集合list;
- 将M行输入的时延列表
{u,v,w}
加入list; - 递归调用,计算定源节点到目的节点,符合要求的时延集合;
- 计算给定源节点到目的节点的最小传输时延;
- 如果目的节点不可达,返回-1
五、JavaScript算法源码
let delayList = [];
let uvwList = [];
function getDelay(begin, end, count) {
for (let i = 0; i < uvwList.length; i++) {
let temp = uvwList[i];
if (temp[0] === begin) {
if (temp[1] === end) {
delayList.push(count + temp[2]);
continue;
}
getDelay(temp[1], end, count + temp[2]);
}
}
}
function calculate(N, M, uvw, begin, end) {
uvwList = uvw;
getDelay(begin, end, 0);
if (delayList.length === 0) {
return -1;
} else {
return Math.min(...delayList);
}
}
六、效果展示
1、输入
5 4
1 3 10
3 4 5
4 5 12
1 5 25
1 5
2、输出
25
3、说明
计算源节点1到目的节点5,符合要求的时延集合
1到3时延10 + 3到4时延5 + 4到5时延12 = 27;
1到5时延25;
所以源节点1到目的节点5的最小时延是25。
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。