华为OD机考2025B卷 - 查找一个有向网络的头节点和尾节点(Java & Python& JS & C++ & C )

最新华为OD机试

真题目录:点击查看目录
华为OD面试真题精选:点击立即查看

2025华为od 机试2025B卷-华为机考OD2025年B卷

题目描述

给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节点,如 [0, 1] 表示从 0 到 1 的路径。

每个节点用正整数表示。求这个数据的首节点与尾节点,题目给的用例会是一个首节点,但可能存在多个尾节点。同时图中可能含有环。如果图中含有环,返回 [-1]。

说明:入度为0是首节点,出度为0是尾节点。

image-20240121210316419

输入描述

第一行为后续输入的键值对数量N(N ≥ 0)

第二行为2N个数字。每两个为一个起点,一个终点.

输出描述

输出一行头节点和尾节点。如果有多个尾节点,按从小到大的顺序输出

备注
  • 如果图有环,输出为 -1
  • 所有输入均合法,不会出现不配对的数据

用例1

输入

4
0 1 0 2 1 2 2 3

输出

0 3

说明

image-20240121210602591

用例2

输入

2
0 1 0 2

输出

0 1 2

说明

image-20240121210613459

解题思路

环的检测

  1. DFS实现:

    • 为了进行DFS,首先构建了图的邻接表表示。这是通过将边信息转换成每个节点的邻接节点列表来完成的。
    • 然后,对每个节点进行DFS遍历。
    • 在遍历过程中,维护两个集合:visitedrecStack
### 华为OD模式下的目录管理方法或解决方案 在华为OD(Outsourcing Dispatcher)模式下,目录管理通常涉及文件系统的操作以及对特定路径的增删改查功能。这类问题常见于机考题中,尤其是在考察候选人对于基础算法数据结构的理解能力时。 #### 1. **目录删除的核心概念** 目录删除问题是典型的树形结构操作之一,在实际开发场景中可能涉及到递归遍历、栈模拟等多种技术手段。具体来说,该类问题可以被抽象成如下几个关键点: - 判断目标节点是否存在子节点- 如果存在,则继续向下层递归;如果不存在,则直接移除当前节点- 特殊情况下需要考虑权限控制或者跨平台差异等问题[^1]。 #### 2. **多语言实现方式** 以下是几种主流编程语言针对此问题的具体解决办法: ##### (1) C++ C++版本利用标准模板库(STL),特别是`<filesystem>`头文件提供了丰富的接口来简化复杂度较高的任务执行过程。 ```cpp #include <iostream> #include <filesystem> namespace fs = std::filesystem; void remove_directory(const std::string& path){ try{ if(fs::exists(path)){ fs::remove_all(path); std::cout << "Directory removed successfully." << std::endl; }else{ throw std::runtime_error("Path does not exist."); } }catch(std::exception &e){ std::cerr << e.what() << '\n'; } } ``` ##### (2) Python Python内置模块os.path与shutil能够轻松完成类似需求的功能扩展。 ```python import os import shutil def delete_folder(folder_path): if os.path.exists(folder_path): shutil.rmtree(folder_path) print(f"{folder_path} has been deleted.") else: raise FileNotFoundError(f"The folder {folder_path} doesn't exist.") if __name__ == "__main__": test_dir = "./test" delete_folder(test_dir) ``` ##### (3) JavaScript(Node.js环境) Node.js中的fs.promises API允许开发者更加优雅地处理异步I/O请求。 ```javascript const fsp = require('fs').promises; async function rmdir(dirPath){ try { await fsp.rm(dirPath, { recursive: true }); console.log(`${dirPath} was successfully removed.`); } catch(err){ console.error(`Error occurred while removing ${dirPath}:`, err.message); } } rmdir('./exampleDir'); ``` ##### (4) Java Java SE7及以上版本引入了Files工具类及其关联的方法集,极大地方便了日常应用开发工作流的设计实施。 ```java import java.io.IOException; import java.nio.file.*; public class DirectoryDeletionExample { public static void main(String[] args) throws IOException { Path dirToDelete = Paths.get("./sample"); Files.walkFileTree(dirToDelete, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)throws IOException { System.out.println("Deleting "+file.toString()); Files.delete(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc)throws IOException { if(exc != null){throw exc;} System.out.println("Deleting directory "+dir.toString()); Files.delete(dir); return FileVisitResult.CONTINUE; } }); System.out.println("All contents under '"+dirToDelete+"' have been cleaned up."); } } ``` 以上各段代码片段分别展示了不同语言环境下如何高效安全地清除指定目录内的全部内容并释放相应资源。 #### 3. **注意事项与优化建议** 当参与像华为这样的大型企业组织安排的技术评估环节时,除了关注基本业务逻辑外还需要注意一些细节方面的要求,例如但不限于以下几点: - 输入输出形式遵循ACM竞赛规则设定; - 自定义变量名称防止触发反抄袭检测制; - 提升整体运行效率减少不必要的计算开销等[^5]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值