分类是图,主要还是搜索吧,用的DFS
class Solution {
boolean[] vis;
public boolean canVisitAllRooms(List<List<Integer>> rooms) {
vis = new boolean[rooms.size()];
vis[0] = true;
return dfs(0, rooms);
}
public boolean dfs(int x, List<List<Integer>> rooms){
//遍历当前房间中所有钥匙
for(int i = 0; i < rooms.get(x).size(); i++){
int key = rooms.get(x).get(i);
if(vis[key] == false) { //如果钥匙对应的房间还没去过
vis[key] = true; //修改标记
dfs(key, rooms); //去下个房间继续搜索
}
}
//遍历完一个房间就看一下是不是所有房间都去过
for (int i = 0; i < vis.length; i++) {
if(vis[i] == false)
return false;
}
//都去过就返回true
return true;
}
}