目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
- 计算源节点1到目的节点5,符合要求的时延集合
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
某通信网络中有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
五、Java算法源码
// 完成源节点到目的节点的时延集合
public static List<Integer> delayList = new ArrayList<>();
// 时延列表的集合
// 下面的M行表示两个节点之间的时延列表{u,v,w}
public static List<int[]> uvwList = new ArrayList<>();/*** 3 3* 1 2 11* 2 3 13* 1 3 50* 1 3** 24*/
public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 网络节点的个数int N = sc.nextInt();// 时延列表的长度int M = sc.nextInt();// 下面的M行表示两个节点之间的时延列表{u,v,w}for (int j = 0; j < M; j++) {// u表示源节点,v表示目的节点,w表示u和v之间的消息传递时延int[] arr = new int[3];// u表示源节点arr[0] = sc.nextInt();if (arr[0] < 1 || arr[0] > N) {System.out.println("源节点输入值不合规");break;}// v表示目的节点arr[1] = sc.nextInt();if (arr[1] < 1 || arr[1] > N) {System.out.println("目的节点输入值不合规");break;}// w表示u和v之间的消息传递时延arr[2] = sc.nextInt();uvwList.add(arr);}// 源节点int begin = sc.nextInt();// 目的节点int end = sc.nextInt();// 计算源节点到目的节点,符合要求的时延集合getDelay(begin, end, 0);// 如果目的节点不可达,返回-1if (delayList.size() == 0) {System.out.println(-1);} else {// 计算给定源节点到目的节点的最小传输时延System.out.println(Collections.min(delayList));}
}/*** 计算源节点到目的节点,符合要求的时延集合** @param begin 源节点* @param end 目的节点* @param count 时延总数*/
public static void getDelay(int begin, int end, int count) {// 遍历时延列表的集合List<{u,v,w}>for (int i = 0; i < uvwList.size(); i++) {int[] temp = uvwList.get(i);// 第一个节点 = 源节点if (temp[0] == begin) {// 如果动态源节点 = 目的节点,完成源节点到目的节点的网络传输if (temp[1] == end) {// 累加消息传递时延delayList.add(count + temp[2]);continue;}// 第二个节点 = 动态源节点,完成源节点到目的节点的网络传输getDelay(temp[1], end, count + temp[2]);}}
}
六、效果展示
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机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。