题目链接
钥匙和房间
题目描述

注意点
- 所有 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);
}
}
}
关键点