题目链接
钥匙和房间
题目描述
注意点
- 所有 rooms[i] 的值 互不相同
- 如果能进入所有房间返回true,否则返回false
- rooms[i] 是进入 i 号房间可以获得的钥匙集合
解答思路
- 可以通过深度优先遍历找到所有可以访问的房间,需要注意的是同一个房间不能重复访问,否则可能出现死循环,所以需要使用一个visited数组标记房间是否已经访问过
代码
class Solution {int sum;public boolean canVisitAllRooms(List<List<Integer>> rooms) {sum = 0;boolean[] visited = new boolean[rooms.size()];dfs(rooms, visited, 0);return sum == rooms.size();}public void dfs(List<List<Integer>> rooms, boolean[] visited, int room) {if (room >= rooms.size() || visited[room]) {return;}visited[room] = true;sum++;for (int key : rooms.get(room)) {dfs(rooms, visited, key);}}
}
关键点
- 深度优先遍历的思想
- 同一个房间不要多次访问