查找一个有向网络的头节点和尾节点
一、题目描述给定一个有向图图中可能包含有环有向边用两个节点表示。第一个整数表示起始节点第二个整数表示终止节点如0 1表示存在从0到1的路径。每个节点用正整数表示求这个数据的头节点与尾节点题目给的用例会是一个头节点但可能存在多个尾节点。同时图中可能含有环如果图中含有环返回-1。说明入度为0是头节点出度为0是尾节点二、输入输出描述输入描述第一行整数N边的数量N ≥ 0第二行2N个整数每两个为一组表示一条有向边第一个为起点第二个为终点所有输入均合法不会出现不配对的数据输出描述存在环输出-1无环输出头节点和尾节点如果有多个尾节点按从大到小的顺序输出。三、示例输入41 2 1 3 2 4 3 4输出1 4说明图的边为1→2、1→3、2→4、3→4入度为 0 的节点1头节点出度为 0 的节点4尾节点无环输出1 4。输入31 2 2 3 3 1输出-1说明存在环1→2→3→1输出-1。四、解题思路1. 核心思想先通过拓扑排序Kahn 算法检测图是否为有向无环图DAG若存在环则直接输出 - 1若为 DAG再利用 “入度 / 出度” 的特征找到唯一头节点入度 0和所有尾节点出度 0最后将尾节点降序排序后输出。核心是 “先验环后找节点”拓扑排序既完成了环检测也为后续节点查找保留了入度 / 出度信息。2. 问题本质分析该问题是有向图的环检测 特殊节点查找核心特征如下输入一组有向边需先构建图结构约束条件仅当图为 DAG 时才存在唯一头节点入度 0和若干尾节点出度 0核心目标检测图是否有环无环时找到头节点和降序排序的尾节点关键原理有向环的特征拓扑排序无法处理完所有节点环内节点入度永远无法为 0DAG 的头节点入度为 0无节点指向它尾节点出度为 0它不指向任何节点。3. 核心逻辑图构建通过邻接表、入度表、出度表完整描述图的结构为后续操作提供数据支撑环检测Kahn 算法入度为 0 的节点入队逐层处理处理节点时其邻接节点入度 - 1新入度为 0 的节点入队若处理节点数 总节点数判定有环节点查找头节点遍历所有节点找到入度为 0 的节点题目保证唯一尾节点遍历所有节点收集出度为 0 的节点并降序排序结果输出有环输出 - 1无环按格式输出头节点 降序尾节点。4. 步骤拆解输入处理与图构建读取边数 N 和 2*N 个节点值按每两个一组解析为有向边构建邻接表记录出边、入度表记录被指向次数、出度表记录指向次数并收集所有节点拓扑排序检测环初始化队列所有入度为 0 的节点入队处理队列取出节点→处理数 1→邻接节点入度 - 1→新入度 0 的节点入队环判断若处理数 总节点数输出 - 1 并终止查找头尾节点头节点遍历节点找到入度为 0 的节点尾节点遍历节点收集出度为 0 的节点降序排序结果输出拼接头节点和降序尾节点按 “头 尾 1 尾 2 ...” 格式输出。五、代码实现import java.util.*; public class GraphHeadTailFinder { public static void main(String[] args) { Scanner scanner new Scanner(System.in); // 1. 读取输入 int N scanner.nextInt(); // 边的数量 scanner.nextLine(); // 换行符 int[] edges new int[2 * N]; for (int i 0; i 2 * N; i) { edges[i] scanner.nextInt(); } // 2. 数据初始化邻接表、入度、出度、总节点集合 MapInteger, ListInteger adj new HashMap(); // 邻接表 MapInteger, Integer inDegree new HashMap(); // 入度 MapInteger, Integer outDegree new HashMap(); // 出度 SetInteger allNodes new HashSet(); // 所有节点 // 3. 构建图 for (int i 0; i edges.length; i 2) { int from edges[i]; int to edges[i 1]; // 维护邻接表 adj.computeIfAbsent(from, k - new ArrayList()).add(to); // 维护总节点集合 allNodes.add(from); allNodes.add(to); // 维护入度to节点入度1 inDegree.put(to, inDegree.getOrDefault(to, 0) 1); // 维护出度from节点出度1 outDegree.put(from, outDegree.getOrDefault(from, 0) 1); // 初始化入度/出度为0的节点避免后续空指针 inDegree.putIfAbsent(from, 0); outDegree.putIfAbsent(to, 0); } // 4. 拓扑排序检测环Kahn算法 QueueInteger queue new LinkedList(); // 入度为0的节点入队 for (int node : allNodes) { if (inDegree.get(node) 0) { queue.offer(node); } } int processed 0; // 拓扑排序处理的节点数 while (!queue.isEmpty()) { int curr queue.poll(); processed; // 遍历当前节点的邻接节点入度-1 for (int next : adj.getOrDefault(curr, new ArrayList())) { inDegree.put(next, inDegree.get(next) - 1); if (inDegree.get(next) 0) { queue.offer(next); } } } // 有环处理节点数 总节点数 if (processed allNodes.size()) { System.out.println(-1); scanner.close(); return; } // 5. 无环找头节点和尾节点 // 头节点入度为0的节点题目保证仅1个 int head -1; for (int node : allNodes) { if (inDegree.get(node) 0) { head node; break; } } // 尾节点出度为0的节点收集后降序排序 ListInteger tails new ArrayList(); for (int node : allNodes) { if (outDegree.get(node) 0) { tails.add(node); } } Collections.sort(tails, Collections.reverseOrder()); // 降序排序 // 6. 拼接输出 StringBuilder result new StringBuilder(); result.append(head); for (int tail : tails) { result.append( ).append(tail); } System.out.println(result); scanner.close(); } }

相关新闻

曾经神器又回来了?最新开源修复版,一键轻松OCR图片提取文字,支持翻译,完全免费 天若OCRV6.0

曾经神器又回来了?最新开源修复版,一键轻松OCR图片提取文字,支持翻译,完全免费 天若OCRV6.0

Hello,大家好! 今天给大家分享一款最新电脑OCR神器——天若OCR开源修复版本, 软件已经整理在文末,有需要的朋友记得获取保存哦~ 链接:https://pan.quark.cn/s/e4b192bde647 一、软件打开方式 这款工具为…

2026/7/6 21:19:58 阅读更多 →
linux-内核栈相关

linux-内核栈相关

由于内核栈空间非常有限(通常只有 8KB 或 16 KB),它保存的内容必须精简且至高无上。如果把内核栈比作进程在内核态工作时的“随身笔记本”,那么这个笔记本的每一页都记录着进程在处理系统调用或中断时的关键信息。内核栈包含哪些东…

2026/7/6 14:01:22 阅读更多 →
Qt 数据库模块详解(从驱动编译到性能优化)

Qt 数据库模块详解(从驱动编译到性能优化)

文章目录 一、概述 二、Qt 数据库驱动机制 三、编译 MySQL 驱动 四、使用 Qt 连接 MySQL 4.1 基本连接步骤 4.2 执行查询与结果处理 4.3 事务处理 4.4 注意事项与易错点 4.4.1 驱动加载失败 4.4.2 连接池管理 4.4.3 字符编码问题 4.4.4 字段索引越界 4.4.5 SQL 注入防范 4.4.6 …

2026/5/17 9:33:33 阅读更多 →

最新新闻

如何利用Wayback Machine浏览器扩展构建你的互联网时光机

如何利用Wayback Machine浏览器扩展构建你的互联网时光机

如何利用Wayback Machine浏览器扩展构建你的互联网时光机 【免费下载链接】wayback-machine-webextension A web browser extension for Chrome, Firefox, Edge, and Safari 14. 项目地址: https://gitcode.com/gh_mirrors/wa/wayback-machine-webextension 在互联网快速…

2026/7/7 7:30:01 阅读更多 →
YOLOv10模型改进-特定领域应用-第92篇:YOLOv10改进策略【特定领域应用】| YOLOv10在安防监控中的应用

YOLOv10模型改进-特定领域应用-第92篇:YOLOv10改进策略【特定领域应用】| YOLOv10在安防监控中的应用

一、本文介绍 本文记录的是YOLOv10在安防监控领域的应用。安防监控需要实时检测人员、车辆、异常行为等目标,YOLOv10凭借其高效的推理速度和准确的检测能力,成为安防监控领域的首选目标检测算法。 二、安防监控场景分析 2.1 检测目标 安防监控场景需要检测的目标包括: 人…

2026/7/7 7:26:00 阅读更多 →
Aimmy完整指南:如何用AI智能瞄准提升你的游戏体验

Aimmy完整指南:如何用AI智能瞄准提升你的游戏体验

Aimmy完整指南:如何用AI智能瞄准提升你的游戏体验 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/gh_mirrors/ai/Aimmy 你是否曾在激…

2026/7/7 7:26:00 阅读更多 →
企业申报省级企业技术中心有哪些条件?企业技术中心申报要求详解

企业申报省级企业技术中心有哪些条件?企业技术中心申报要求详解

江苏省省级企业技术中心申报条件主要分为基本准入条件(一票否决项)、核心量化指标、评分与行业系数要求以及合规与前置条件四个维度。具体申报要求如下:一、基本准入条件1.主体资格:企业在江苏省境内注册,具有独立法人…

2026/7/7 7:26:00 阅读更多 →
ASM330LHH与STM32L041C6运动跟踪系统设计与优化

ASM330LHH与STM32L041C6运动跟踪系统设计与优化

1. ASM330LHH与STM32L041C6的硬件组合解析1.1 ASM330LHH的6DoF IMU特性详解ASM330LHH这颗汽车级6轴惯性模块堪称运动跟踪领域的精密仪器。它采用系统级封装(SiP)技术,在3.3mm2.6mm0.83mm的微型封装内集成了三轴数字加速度计和三轴数字陀螺仪。实测中我发现&#xff…

2026/7/7 7:24:00 阅读更多 →
IDM注册表锁定激活技术深度解析:永久试用期管理方案

IDM注册表锁定激活技术深度解析:永久试用期管理方案

IDM注册表锁定激活技术深度解析:永久试用期管理方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM&…

2026/7/7 7:21:59 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻