无法播放?请 点击这里 跳转到Youtube
切换视频源:

题目链接: https://leetcode.com/problems/keys-and-rooms/

GitHub答案源代码请点击这里

DFS解法

class Solution {
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        int n = rooms.size();
        Set<Integer> visited = new HashSet<>();
        
        dfs(rooms, visited, 0);
        
        return visited.size() == n;
    }
    
    private void dfs(List<List<Integer>> edges, Set<Integer> visited, int room) {
        if (visited.contains(room)) {
            return;
        }
        
        visited.add(room);
        for (int nei : edges.get(room)) {
            dfs(edges, visited, nei);
        }
    }
}

BFS解法

class Solution {
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        int n = rooms.size();
        
        Queue<Integer> queue = new LinkedList<>();
        queue.offer(0);
    
        Set<Integer> visited = new HashSet<>();
        visited.add(0);
        
        while (!queue.isEmpty()) {
            int cur = queue.poll();
            
            for (int nei : rooms.get(cur)) {
                if (!visited.contains(nei)) {
                    visited.add(nei);
                    queue.offer(nei);
                }
            }
        }
        
        return visited.size() == n;
    }
}