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

华为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

相关文章:

  • 回调函数的理解
  • 【LangChain】框架解析
  • ASP.NET TreeView控件使用指南
  • 深入了解linux系统—— 库的链接和加载
  • 【Linux】shell脚本的变量与运算
  • OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局
  • 代码随想录算法训练营第五十三天
  • 什么是node.js、npm、vue
  • DeepSeek进阶教程:实时数据分析与自动化决策系统
  • IDEA项目推送到远程仓库
  • Intellij IDEA 查找接口实现类的快捷键
  • 全志F1c200开发笔记——移植Debian文件系统
  • 【Rust模式与匹配】Rust模式与匹配深入探索与应用实战
  • 力扣面试150题--二叉树的右视图
  • 高速连接器设计的真相
  • 由enctype-引出post与get的关系,最后深究至请求/响应报文
  • windows系统下通过visual studio使用clang tooling
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十八) -> 开发云对象
  • 变更数据捕获(CDC)与流处理引擎实现医疗数据实时同步(下)
  • 【Python】3.函数与列表
  • 做怎么样的网站好/seo软件哪个好
  • 京山大洪山旅游开发有限公司 做网站/百度账号怎么注册
  • 如何用腾讯云主机做网站/三只松鼠搜索引擎营销案例
  • 新手网站设计看哪本书/全球网站访问量排名
  • 昆山建设网站/百度收录权重
  • c2c有哪些网站/移动网站优化排名