题目描述
给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节点,如 [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
用于记录当前递归调用栈中的节点。
-
检测环的逻辑:
- 在DFS遍历中,如果当前节点已在
recStack
中,则表示找到了一个环,因为这意味着在遍历过程中回到了正在访问的节点。 - 如果节点在
- 在DFS遍历中,如果当前节点已在