当前位置: 首页 > java >正文

华为OD机试真题——报文回路(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《报文回路》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C

GO


题目名称:报文回路


  1. 知识点:图论(邻接表遍历)、逻辑处理
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

IGMP协议中,响应报文和查询报文是维系组播通路的两个重要报文。在已建立的组播通路中,相邻的HOST和ROUTER之间,ROUTER会向HOST发送查询报文,HOST收到后需回复响应报文以维持连接。若双向报文缺失,则通路异常。现给定抓取的报文列表,判断组播通路是否正常。

输入描述

  • 第一行:报文数量C(C ≤ 100)。
  • 后续C行:每行两个设备节点D1和D2,表示D1到D2的单向报文(空格分隔)。

输出描述

  • 通路正常输出True,否则输出False

示例
输入:

5  
1 2  
2 3  
3 2  
1 2  
2 1  

输出:

True  

Java

问题分析

我们需要判断组播通路是否正常。组播通路的正常条件是:所有相邻设备的双向报文必须存在。即,对于每一条存在的 D1→D2 的报文,必须存在对应的 D2→D1 的报文。


解题思路

  1. 输入解析:读取所有报文,存储为边列表,并构建邻接表。
  2. 邻接表构建:用 Map 记录每个节点到其相邻节点的集合。
  3. 双向检查:遍历所有边,检查其反向边是否存在。
  4. 结果判定:若所有边的反向边均存在,返回 True,否则 False

代码实现

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int C = scanner.nextInt(); // 读取报文数量List<int[]> edges = new ArrayList<>(); // 存储所有报文边Map<Integer, Set<Integer>> adjacencyMap = new HashMap<>(); // 邻接表// 读取所有报文并构建邻接表for (int i = 0; i < C; i++) {int D1 = scanner.nextInt();int D2 = scanner.nextInt();edges.add(new int[]{D1, D2}); // 存储边adjacencyMap.computeIfAbsent(D1, k -> new HashSet<>()).add(D2); // 记录D1→D2}// 遍历所有边,检查反向边是否存在boolean isValid = true;for (int[] edge : edges) {int D1 = edge[0];int D2 = edge[1];// 检查D2→D1是否存在if (!adjacencyMap.containsKey(D2) || !adjacencyMap.get(D2).contains(D1)) {isValid = false;break;}}System.out.println(isValid ? "True" : "False");}
}

代码详解

  1. 输入处理

    • C 表示报文数量,后续读取 C 条边。
    • edges 列表存储所有输入的边(例如 [D1, D2])。
    • adjacencyMap 是邻接表,键为起始节点,值为所有可达节点的集合。
  2. 邻接表构建

    • adjacencyMap.computeIfAbsent(D1, k -> new HashSet<>()).add(D2);:若 D1 不存在于邻接表,创建空集合,然后将 D2 添加到集合中。
  3. 双向检查

    • 遍历所有边 edge,检查反向边 D2→D1 是否存在。
    • adjacencyMap.containsKey(D2):检查 D2 是否有出边。
    • adjacencyMap.get(D2).contains(D1):检查 D2 的出边是否包含 D1
  4. 结果输出

    • 若所有边的反向边均存在,输出 True,否则输出 False

示例测试

示例1
输入:

5
1 2
2 3
3 2
1 2
2 1

输出&#x

http://www.xdnf.cn/news/9766.html

相关文章:

  • 【ConvLSTM第一期】ConvLSTM原理
  • 回文数-leetCode-009
  • [Java恶补day10] 560. 和为K的子数组
  • 每日Prompt:卵石拼画
  • 计算机图形学:(五)坐标系
  • 排序算法-归并排序与快速排序
  • 如何避免客户频繁更换对接人
  • vue3项目 前端文件下载的两种工具函数
  • spring的多语言怎么实现?
  • OSI 七大层详解
  • vue element日期范围选择器只能选择指定天数内的
  • shell脚本实现字符串子网掩码转为位数
  • mqtt协议连接阿里云平台
  • 基于多模态脑电、音频与视觉信号的情感识别算法【Nature核心期刊,EAV:EEG-音频-视频数据集】
  • Deepseek应用技巧-Dify本地化搭建合同审批助手
  • Delphi 导入excel
  • 【东枫科技】KrakenSDR 测向快速入门指南
  • Vision Transformer网络结构
  • 【穷举】数字方格
  • 文件系统与文件管理:从磁盘到内核的全链路解析
  • 高效工具-tldr
  • 网络安全的守护者:iVX 如何构建全方位防护体系
  • 镍钯金PCB有哪些工艺优势?
  • 五、web安全--XSS漏洞(2)--XSS相关payload
  • 《Discuz! X3.5开发从入门到生态共建》第3章 Discuz! X3.5 核心目录结构解析-优雅草卓伊凡
  • Parsel深度解析:从入门到高阶的网页数据抓取艺术
  • python同步mysql数据
  • WPS 免登录解锁编辑
  • 安全访问 std::tuple 的容错方法及气象领域应用
  • R3GAN利用配置好的Pytorch训练自己的数据集