赞
踩
思路:根据题目描述,从一个节点出发,只要找不到环路,就可以判断该节点为一个安全节点
如何判断是否存在环路呢?
可以采用经典的三色算法
从一点出发,执行DFS搜索,每次经过一个节点,就给该节点染色。若在搜索中到达了某节点发现该节点已经被染色过,则证明存在环路。
安全节点就是黑色节点
/* 4. 找到最终的安全状态 */ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; public class Solution802 { public List<Integer> eventualSafeNodes(int[][] graph) { int length = graph.length; int[] state = new int[length]; List<Integer> res = new ArrayList<>(); for (int i = 0; i < length; i++) { if(dyeing(graph, state, i)){ res.add(i); } } return res; } public boolean dyeing(int[][] graph, int[] state, int num) { if (state[num] > 0) { return state[num] == 2; } state[num] = 1; for (int nextNum : graph[num]) { if (!dyeing(graph, state, nextNum)) { return false; } } state[num] = 2; return true; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。