zoukankan      html  css  js  c++  java
  • 802. Find Eventual Safe States

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

    class Solution {
    public:
        vector<bool> visited;
        vector<int> mem;    // -1 unknown, 0 unsafe, 1 safe.
        int n;
        vector<int> eventualSafeNodes(vector<vector<int>>& graph) {
            n = graph.size();
            mem = vector<int>(n, -1);
            visited = vector<bool>(n, false);
            for (int i = 0; i < n; i++)
                dfs(graph, i);
            
            vector<int> res;
            for (int i = 0; i < n; i++)
                if (mem[i] == 1)
                    res.push_back(i);
            return res;
        }
        bool dfs(vector<vector<int>>& graph, int i) {
            // check if i is evetually safe
            if (mem[i] != -1)   return mem[i] == 1;
            
            bool res = true;
            if (visited[i]) {  // A loop
                res = false;
            }
            else {
                visited[i] = true;
                for (auto j : graph[i]) {
                    if (!dfs(graph, j)) {
                        res = false;
                        break;
                    }
                }
                // visited[i] = false;    // This line is optional, since we've cached the result for i in mem.
            }
            mem[i] = res;
            return res;
        }
    };
    

      

  • 相关阅读:
    碰撞器与触发器[Unity]
    Mesh属性[Unity]
    4.3之后的PingPong效果实现
    windows reload()
    浏览器的内核
    redis 1
    oauth 2.0转
    java 散列
    js 事件详解 冒泡
    HttpURLConnection和HttpClient的区别2(转)
  • 原文地址:https://www.cnblogs.com/JTechRoad/p/8985136.html
Copyright © 2011-2022 走看看