Kimi    LeetCode LCP 21. 追逐游戏 Java实现 以下是 LeetCode LCP 21. 追逐游戏的 Java 实现基于 BFS 拓扑排序找环的经典解法javaclass Solution {private ListListInteger g;public int chaseGame(int[][] edges, int startA, int startB) {int n edges.length;g new ArrayList();for (int i 0; i n; i) {g.add(new ArrayList());}int[] degree new int[n];for (int[] e : edges) {int u e[0] - 1, v e[1] - 1;// 特判A和B相邻第一回合直接抓到if ((u startA - 1 v startB - 1) ||(u startB - 1 v startA - 1)) {return 1;}g.get(u).add(v);g.get(v).add(u);degree[u];degree[v];}startA--;startB--;// BFS求A、B到各点的最短距离int[] da bfs(startA);int[] db bfs(startB);// 拓扑排序找环基环树N个点N条边去掉所有叶子后剩余的就是环boolean[] inLoop new boolean[n];Arrays.fill(inLoop, true);QueueInteger q new LinkedList();for (int i 0; i n; i) {if (degree[i] 1) {q.add(i);}}while (!q.isEmpty()) {int u q.poll();inLoop[u] false;for (int v : g.get(u)) {degree[v]--;if (degree[v] 1) {q.add(v);}}}// 统计环的长度int loopLen 0;for (int i 0; i n; i) {if (inLoop[i]) loopLen;}// 判断B能否逃脱若环长度3且存在环上点i满足 da[i] db[i] 1// 说明B能先到达环上某点且A无法拦截B可在环上永远绕圈if (loopLen 3) {for (int i 0; i n; i) {if (inLoop[i] da[i] db[i] 1) {return -1;}}}// 若A能追到B答案为所有满足 da[i] db[i] 1 的点中 da[i] 的最大值// 因为B会选择一个A到达时间比B到达时间至少多2的点尽可能拖延int ans 0;for (int i 0; i n; i) {if (da[i] db[i] 1) {ans Math.max(ans, da[i]);}}return ans;}private int[] bfs(int start) {int n g.size();int[] dis new int[n];Arrays.fill(dis, -1);QueueInteger q new LinkedList();q.add(start);dis[start] 0;while (!q.isEmpty()) {int u q.poll();for (int v : g.get(u)) {if (dis[v] -1) {dis[v] dis[u] 1;q.add(v);}}}return dis;}}核心思路1. 图结构分析题目给的是 N 个点 N 条边的连通图即基环树一棵树 一条边形成环2. 找环用类似拓扑排序的方法不断删除度为 1 的叶子节点最后剩下的就是环上的点3. BFS 求距离分别计算 A 和 B 到所有点的最短距离 da[] 和 db[]4. 判断逃脱条件- 若环长度 3且存在环上点满足 da[i] db[i] 1则 B 能先上环并永远绕圈返回 -1- 若环长度 3即使 B 上了环A 也能在有限步内抓到 B因为三角形环上无处可逃5. 计算答案A 能追到 B 时B 会选择一个满足 da[i] db[i] 1 的点尽可能拖延答案就是这些点中 da[i] 的最大值复杂度- 时间复杂度O(N)- 空间复杂度O(N)

相关新闻

最新新闻

NeteaseCloudMusicFlac 实操指南:3 条命令批量下载整张网易云歌单的 FLAC 无损音乐

NeteaseCloudMusicFlac 实操指南:3 条命令批量下载整张网易云歌单的 FLAC 无损音乐

NeteaseCloudMusicFlac 实操指南:3 条命令批量下载整张网易云歌单的 FLAC 无损音乐 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 想收藏…

2026/8/21 22:18:38
QModMaster:免费连上 RTU/TCP 设备的 ModBus 主站工具

QModMaster:免费连上 RTU/TCP 设备的 ModBus 主站工具

QModMaster:免费连上 RTU/TCP 设备的 ModBus 主站工具 【免费下载链接】qModbusMaster Fork of QModMaster (https://sourceforge.net/p/qmodmaster/code/ci/default/tree/) 项目地址: https://gitcode.com/gh_mirrors/qm/qModbusMaster QModMaster 是一款基…

2026/8/21 22:18:38
把邮箱变成 AI 智能日历:MailCal 从 GitHub 下载到配置使用全流程

把邮箱变成 AI 智能日历:MailCal 从 GitHub 下载到配置使用全流程

MailCal:从 GitHub 下载到配置使用的完整教程 MailCal 是一个本地邮件日历管家,通过 IMAP 读取 QQ 邮箱,自动把邮件里的面试、测评、会议和截止日期整理成日历事件,并提供 REST API 和 MCP 接口。 1. 从 GitHub 下载项目 项目地…

2026/8/21 22:18:38
SMUDebugTool:AMD开源调试工具,5分钟逐核调PBO

SMUDebugTool:AMD开源调试工具,5分钟逐核调PBO

SMUDebugTool:AMD开源调试工具,5分钟逐核调PBO 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…

2026/8/21 22:18:38
超声波揭秘:金属板中的S0与A0波舞蹈

超声波揭秘:金属板中的S0与A0波舞蹈

如果把一块金属板或机翼蒙皮想象成一张紧绷的坚硬橡皮膜,当你用压电传感器在上面“敲一下”时,超声波就会被锁在板子的上、下两个表面之间,沿着板子向远处传播——这就是 Lamb 波(板中导波)。Lamb 波最让人头疼也最巧妙…

2026/8/21 22:18:38
LazyMem:AI智能体记忆管理新范式,解决RAG与上下文窗口瓶颈

LazyMem:AI智能体记忆管理新范式,解决RAG与上下文窗口瓶颈

1. 项目概述:当AI智能体需要记住“一切”最近在折腾各种AI智能体(Agent)项目时,我遇到了一个普遍且棘手的问题:记忆管理。无论是构建一个能持续对话的客服助手,还是一个能长期规划任务的自主代理&#xff0…

2026/8/21 22:13:38