个人技术分享

题目:841. 钥匙和房间

思路

深度优先搜索,只从0号房间进入,最后统计遍历情况,如果有没有遍历到的,返回false,否则返回true

代码

class Solution {
private:
    void dfs(vector<vector<int>>& rooms, vector<bool>& visited, int x)
    {
        for(const auto& key : rooms[x])
        {
            // 比如[1]
            if(!visited[key])
            {
                visited[key] = true;
                dfs(rooms, visited, key);
            }
        }
    }


public:
    bool canVisitAllRooms(vector<vector<int>>& rooms) {
        int i, j;
        int n = rooms.size();
        vector<bool> visited(n, false);
        visited[0] = true;
        dfs(rooms, visited, 0);
        
        for(i = 0; i < n; i++)
        {
            if(!visited[i])
            {
                return false;
            }
        }
        return true;
    }
};