无法播放?请 点击这里 跳转到Youtube
切换视频源:
题目链接: https://leetcode.com/problems/keys-and-rooms/
GitHub答案源代码请点击这里
DFS解法
class Solution {
public boolean canVisitAllRooms(List<List<Integer>> rooms) {
int n = rooms.size();
Set<Integer> visited = new HashSet<>();
dfs(rooms, visited, 0);
return visited.size() == n;
}
private void dfs(List<List<Integer>> edges, Set<Integer> visited, int room) {
if (visited.contains(room)) {
return;
}
visited.add(room);
for (int nei : edges.get(room)) {
dfs(edges, visited, nei);
}
}
}
BFS解法
class Solution {
public boolean canVisitAllRooms(List<List<Integer>> rooms) {
int n = rooms.size();
Queue<Integer> queue = new LinkedList<>();
queue.offer(0);
Set<Integer> visited = new HashSet<>();
visited.add(0);
while (!queue.isEmpty()) {
int cur = queue.poll();
for (int nei : rooms.get(cur)) {
if (!visited.contains(nei)) {
visited.add(nei);
queue.offer(nei);
}
}
}
return visited.size() == n;
}
}