题目

https://leetcode.com/problems/find-eventual-safe-states/

题解

用 circle 表示所有环上节点和所有能到达环的节点。

DFS,实际上每一次遍历都是像遍历链表一样,判断链表是否有环,如果有环,则将整个链放进 circle 中。

有个剪枝优化:如果 DFS 过程中,遇到了 circle 中的元素,则说明之前走过的路径也应该被放进 circle 中。

最后,返回所有不在 ciecle 中的元素即可。

class Solution {int N;public List<Integer> eventualSafeNodes(int[][] graph) {N = graph.length;Set<Integer> circle = new HashSet<>();Set<Integer> unCircle = new HashSet<>();for (int i = 0; i < N; i++) {HashSet<Integer> seen = new HashSet<>();seen.add(i);dfs(graph, circle, unCircle, seen, i);}List<Integer> result = new ArrayList<>();for (int i = 0; i < N; i++) {if (!circle.contains(i)) result.add(i);}return result;}public void dfs(int[][] graph, Set<Integer> circle, Set<Integer> unCircle, Set<Integer> seen, int i) {if (circle.contains(i)) {circle.addAll(seen);return;}if (unCircle.contains(i)) {return;}for (int j : graph[i]) {if (seen.contains(j)) {circle.addAll(seen);return;} else {seen.add(j);dfs(graph, circle, unCircle, seen, j);seen.remove(j);}}if (!circle.contains(i)) unCircle.addAll(seen);}
}

leetcode 802. Find Eventual Safe States | 802. 找到最终的安全状态(有向图DFS)相关推荐

  1. 802. Find Eventual Safe States [Medium]

    /*** 自己的思路,DFS* 开始代码一直runtime error,看了discuss发现是因为helper里没有在进入递归前将dp[i]设为false* Runtime: 4 ms, faste ...

  2. LeetCode之Find Eventual Safe States(Kotlin)

    问题: In a directed graph, we start at some node and every turn, walk along a directed edge of the gra ...

  3. LeetCode——802. 找到最终的安全状态(Find Eventual Safe States)[中等]——分析及代码(Java)

    LeetCode--802. 找到最终的安全状态[Find Eventual Safe States][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 反图 + 拓扑排序 (1)思路 ...

  4. 【Lintcode】1015. Find Eventual Safe States

    题目地址: https://www.lintcode.com/problem/find-eventual-safe-states/description 给定一个有向图,如果从某个顶点出发的任何路径都 ...

  5. leetcode 802. 找到最终的安全状态(Find Eventual Safe States)

    目录 题目描述: 示例: 解法: 题目描述: 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后 ...

  6. LeetCode 802. 找到最终的安全状态(逆向图+拓扑排序)

    文章目录 1. 题目 2. 解题 1. 题目 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止. 现在, 如果我们最后 ...

  7. 【leetcode】802. 找到最终的安全状态(find-eventual-safe-states)(拓扑排序)[中等]

    链接 https://leetcode-cn.com/problems/find-eventual-safe-states/ 耗时 解题:23 min 题解:23 min 题意 在有向图中,以某个节点 ...

  8. leetcodee-802-find eventual safe states

    在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走. 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止.现在, 如果我们最后能走到终点,那么我们的起始节点是最终安全的. 更 ...

  9. leetcode--802. Find Eventual Safe States题解

    题目 In a directed graph, we start at some node and every turn, walk along a directed edge of the grap ...

最新文章

  1. Spring(ApplicationContextBeanFactory)
  2. 记一次对 Laravel-permission 项目的性能优化
  3. HTML/CSS——PC端博文尚美网页
  4. 并行算法设计与性能优化_CME 323: 分布式算法与优化(1)
  5. Lua的require使用
  6. python中if有几种使用方式_python 中if-else的多种简洁的写法
  7. java 资深工程师必备技能
  8. kafka日志格式和分区
  9. 1. Symfony 2 --- 简介
  10. Ghostscript的介绍
  11. 电脑如何设置u盘启动,u盘启动项设置方法
  12. python实战:爬取优美图库,将图片格式的本地存储
  13. html5新增标签有dfn吗,html dfn标签怎么用
  14. web前端不好找工作之web前端面试简历补救篇
  15. 用python实现相声、评书自动下载(四)
  16. 计算机主机突然断电有什么影响吗,断电对电脑的伤害大吗?有什么损伤?
  17. hibernate对oracle的文本字段按拼音排序
  18. [原创]使用FleaPHP框架构建简单留言本应用
  19. Python 处理日期与时间的全面总结!
  20. 【ESP32】【乐鑫发布 AI 语音麦克风阵列开发板 ESP32-Korvo】

热门文章

  1. POJ - 2778 DNA Sequence(AC自动机+矩阵快速幂)
  2. CodeForces - 1198A MP3(尺取)
  3. PAT (Advanced Level) 1016 Phone Bills(恶心模拟)
  4. 打开服务器数据库文件,如何打开服务器中的数据库文件
  5. android qq 登陆 简书,使用QQ第三方登录
  6. NOIP2017提高组比赛总结
  7. C++静态多态(模版模拟多态)的讨论
  8. cocos2d-x初探学习笔记(2)--重要概念及Test例子结构
  9. Python进程multiprocessing. Process()的使用
  10. Python 获取指定文件夹下的目录和文件