1. 这是一个很经典的递归问题,首先递归终止条件就是有没有访问过所有房间有返回true,如果房间已经被访问过返回一个值就是所有房间有没有被访问过都访问过返回true否则返回false
2.将当前房间的访问位置true
3.遍历此房间的钥匙列表,开始递归如果返回true则返回true跳出,否则循环完毕后返回false无法访问全部的房间
class Solution {
public boolean canVisitAllRooms(List<List<Integer>> rooms) {
boolean flag[]=new boolean[rooms.size()];
return dfs(rooms,flag,0);
}
public boolean dfs(List<List<Integer>> rooms,boolean[] flag,int number){
if(flag[number]){
return isWin(flag);
}
flag[number]=true;
if(isWin(flag)){
return true;
}
for(int i=0;i<rooms.get(number).size();i++){
if(dfs(rooms,flag,rooms.get(number).get(i))){
return true;
}
}
return false;
}
public boolean isWin(boolean[] flag){
for(int i=0;i<flag.length;i++){
if(!flag[i]){
return false;
}
}
return true;
}
}