zoukankan      html  css  js  c++  java
  • 841. 钥匙和房间

    841. 钥匙和房间

    方法一:深度优先搜索

    思路及解法

    我们可以使用深度优先搜索的方式遍历整张图,统计可以到达的节点个数,并利用数组 vis 标记当前节点是否访问过,以防止重复访问。

    class Solution {
    public:
        vector<int> vis;
        int num;
    
        void dfs(vector<vector<int> >& rooms, int x) {
            vis[x] = true;
            num++;
            for (int i = 0; i < rooms[x].size(); i++)
                if (!vis[rooms[x][i]])
                    dfs(rooms, rooms[x][i]);
        }
    
        bool canVisitAllRooms(vector<vector<int> >& rooms) {
            int n = rooms.size();
            num = 0;
            vis.resize(n);
            dfs(rooms, 0);
            return num == n;
        }
    };

     

    复杂度分析

    时间复杂度:O(n+m),其中 n 是房间的数量,m 是所有房间中的钥匙数量的总数。

    空间复杂度:O(n),其中 n是房间的数量。主要为栈空间的开销。

     

    方法二:广度优先搜索


    思路及解法

    我们也可以使用广度优先搜索的方式遍历整张图,统计可以到达的节点个数,并利用数组vis 标记当前节点是否访问过,以防止重复访问。

     

    class Solution {
    public:
        bool canVisitAllRooms(vector<vector<int> >& rooms) {
            int n=rooms.size();
            int num=0;
            queue<int>que;
            que.push(0);
            vector<bool>vis(n);
            vis[0]=true;
            while (!que.empty())
            {
                int front = que.front();
                que.pop();
                num++;
                for (int i = 0; i < rooms[front].size(); i++)
                {
                    
                    if(!vis[rooms[front][i]]){
                        que.push(rooms[front][i]);
                        vis[rooms[front][i]]=true;
                    }
                }
            }
            return num==n;
        }
    };

     

    复杂度分析

    时间复杂度:O(n+m),其中 n 是房间的数量,m 是所有房间中的钥匙数量的总数。

    空间复杂度:O(n),其中 n是房间的数量。主要为栈空间的开销。

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13735418.html

  • 相关阅读:
    1143 Lowest Common Ancestor (30)
    PAT 1135 Is It A Red-Black Tree
    PAT 1119 Pre- and Post-order Traversals
    1102 Invert a Binary Tree(25 分)
    PAT总结
    c++ getline的用法
    PAT 1049 Counting Ones (30)
    PAT 1022 Digital Library (30)
    java jar包
    NIO的理解
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13735418.html
Copyright © 2011-2022 走看看