华为OD机考:OD统一考试D卷+C卷+A卷+B卷+刷题OJ
真题目录:华为OD机考机试 真题目录( D卷 +C卷 + B卷 + A卷) + 考点说明
在线OJ:点击立即刷题,模拟真实机考环境
华为OD面试真题精选:华为OD面试真题精选
题目描述
给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节点,如 [0, 1] 表示从 0 到 1 的路径。
每个节点用正整数表示。求这个数据的首节点与尾节点,题目给的用例会是一个首节点,但可能存在多个尾节点。同时图中可能含有环。如果图中含有环,返回 [-1]。
说明:入度为0是首节点,出度为0是尾节点。
输入描述
第一行为后续输入的键值对数量N(N ≥ 0)
第二行为2N个数字。每两个为一个起点,一个终点.
输出描述
输出一行头节点和尾节点。如果有多个尾节点,按从小到大的顺序输出
备注
- 如果图有环,输出为 -1
- 所有输入均合法,不会出现不配对的数据
用例1
输入
4
0 1 0 2 1 2 2 3
输出
0 3
说明
用例2
输入
2
0 1 0 2
输出
0 1 2
说明
解题思路
环的检测
-
DFS实现:
- 为了进行DFS,首先构建了图的邻接表表示。这是通过将边信息转换成每个节点的邻接节点列表来完成的。
- 然后,对每个节点进行DFS遍历。
- 在遍历过程中,维护两个集合:
visited
和recStack
。visited
用于记录已经访问过的节点。recStack
用于记录当前递归调用栈中的节点。