Question 2 Keys and Rooms
Question
public boolean canVisitedAllRooms(List<List<Integer>> rooms) {
Set<Integer> visited = new HashSet<>();
int totalNumberOfRoomsNeedsToVisit = rooms.size();
dfs(rooms, 0, visited); //一定要注意图不一定是联通的
bfs(rooms, 0, visited);
return visited.size() == totalNumberOfRoomsNeedsToVisit;
}
private dfs(List<List<Integer>> rooms, int current, Set<Integer> visited) {
if (visited.contains(current)) {
return;
}
visited.add(current);
List<Integer> neis = rooms.get(current);
if (!neis.isEmpty()) {
for (Integer nei: neis) {
dfs(rooms, nei, visited);
}
}
}
private void bfs(List<List<Integer>> rooms, int current, Set<Integer> visited) {
Deque<Integer> queue = new ArrayDeque<>();
queue.offer(current);
visited.add(current);
while (!queue.isEmpty()) {
int cur = queue.poll();
List<Integer> neis = rooms.get(cur);
if (!neis.isEmpty()) {
for (Integer nei: neis) {
if (!visited.contains(nei)) {
queue.offer(nei);
visited.add(nei);
}
}
}
}
}Last updated