华为OD机试 - 最小传输时延 - 深度优先搜索DFS(Java 2023 B卷 100分)

news/2024/7/20 17:03:31 标签: 华为od, 深度优先, java

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、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表示目的节点;

三、输出描述

输出一个整数,表示源节点到目的节点的最小时延。

四、解题思路

  1. 定义一个时延列表{u,v,w}的集合list;
  2. 将M行输入的时延列表{u,v,w}加入list;
  3. 递归调用,计算定源节点到目的节点,符合要求的时延集合;
  4. 计算给定源节点到目的节点的最小传输时延;
  5. 如果目的节点不可达,返回-1

五、Java算法源码

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);

    // 如果目的节点不可达,返回-1
    if (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机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述


http://www.niftyadmin.cn/n/5046564.html

相关文章

CompletableFuture-FutureTask结合线程池提升性能

使用线程池&#xff1a; 返回计算结果&#xff1a; 2.2.3 Future编码实战和优缺点分析 优点&#xff1a;Future线程池异步多线程任务配合&#xff0c;能显著提高程序的运行效率。 缺点&#xff1a; get()阻塞---一旦调用get()方法求结果&#xff0c;一旦调用不见不散&…

spring-oauthorization-server整合

Spring Authorization Server 是一个框架&#xff0c;它提供了 OAuth 2.1和 OpenID Connect 1.0规范以及其他相关规范的实现。它构建在 Spring Security 之上&#xff0c;为构建 OpenID Connect 1.0 Identity Provider 和 OAuth2 Authorization Server 产品提供安全、轻量级和可…

Unity WebSocket-Server

&#x1f33c;WebSocket-Server &#x1f96a;效果展示&#x1f32d;启动Server&#x1f371;连接Server &#x1f96a;效果展示 在Unity中创建WebSocket服务器&#xff0c;从网页连接到该服务器进行消息通信&#xff0c;在Unity中接收到的消息都在主线程中 &#x1f32d;启…

vue 组件公共的方法

我这是取后端数据发现后端给的数据啥样的都有 有带标签的 有带图片的 还有换行的把这些筛选掉 比如去掉标签 去掉空格 1.首先创建一个公共页面 /* 处理数据html标签显示界面 */export function removeHTMLTag(htmlStr) { let html htmlStr .replace(/<img.*?>/g…

CCF会议期刊(软件工程/系统软件/程序设计语言)

中国计算机学会推荐国际学术会议 1PLDIACM SIGPLAN Conference on Programming Language Design & ImplementationA会议软件工程/系统软件/程序设计语言2POPLACM SIGPLAN-SIGACT Symposium on Principles of Programming LanguagesA会议软件工程/系统软件/程序设计语言3FS…

组合计数训练题解

CF40E 题目链接 点击打开链接 题目解法 首先&#xff0c;如果 n , m n,m n,m 一奇一偶&#xff0c;那么答案为 0 0 0 原因是从行和列的角度分析&#xff0c; − 1 -1 −1 个数的奇偶性不同 可以发现 k < max ⁡ { n , m } k<\max\{n,m\} k<max{n,m} 的性质很微…

shell中[[]]与[],=、==和-eq的辨析

1、、和-eq 在shell中&#xff0c;和运算符都可以用于判断两个字符串、两个字符串变量是否相同&#xff0c; 支持模式匹配&#xff0c;而 不支持模式匹配。 使用 -eq 来判断两个整数是否相等。 # 字符串比较 # 给变量赋值时&#xff0c;等号前后没有空格&#xff0c;有空格时…

Python爬虫教程:解析网页中的元素

前言&#xff1a; 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 在我们理解了网页中标签是如何嵌套&#xff0c;以及网页的构成之后&#xff0c; 我们就是可以开始学习使用python中的第三方库BeautifulSoup筛…