๋‹ต

import java.util.ArrayList;
import java.util.List;

class Solution {
    public List<Integer> eventualSafeNodes(int[][] graph) {

        int n = graph.length;
        int[] visited = new int[n]; // 0: not visited, 1: visiting, 2: safe
        List<Integer> result = new ArrayList<>();

        // DFS to check if a node is safe
        for(int i = 0; i < n; i++){
            if (dfs(i, graph, visited)){
                result.add(i);
            }
        }
        return result;
    }

    private boolean dfs(int node, int[][] graph, int[] visited) {
        if(visited[node] > 0) {
            return visited[node] == 2; // Return true if alreay marked as safe
        }

        visited[node] = 1; // Mark as visited
        for(int neighbor : graph[node]) {
            if (!dfs(neighbor, graph, visited)) {
                return false; // If any neighbor is unsafe, current node is unsafe
            }
        }
        visited[node] = 2; // Mark as safe
        return true;
    }
}

Last updated

Was this helpful?