1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public boolean canVisitAllRooms(List<List<Integer>> rooms) { Deque<Integer> availableRooms = new ArrayDeque<>(); boolean[] visited = new boolean[rooms.size()]; visited[0] = true; availableRooms.offer(0); int roomCount = 1; while (!availableRooms.isEmpty()) { int currRoom = availableRooms.poll(); for (Integer key : rooms.get(currRoom)) { if (!visited[key]) { availableRooms.offer(key); visited[key] = true; roomCount += 1; } } } return roomCount == rooms.size(); } }
|
直接bfs.
时间复杂度: O(n)
空间复杂度: O(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { private int roomCount;
public boolean canVisitAllRooms(List<List<Integer>> rooms) { boolean[] visited = new boolean[rooms.size()]; dfs(0, rooms, visited); return roomCount == rooms.size(); }
private void dfs(int currRoom, List<List<Integer>> rooms, boolean[] visited) { if (visited[currRoom]) { return; } visited[currRoom] = true; roomCount += 1; List<Integer> keys = rooms.get(currRoom); for (Integer key : keys) { dfs(key, rooms, visited); } } }
|
也可以dfs.
时间复杂度和空间复杂度不变.