There are n rooms labeled from 0 to n - 1 and all the rooms are locked except for room 0. Your goal is to visit all the rooms. However, you cannot enter a locked room without having its key.
When you visit a room, you may find a set of distinct keys in it. Each key has a number on it, denoting which room it unlocks, and you can take all of them with you to unlock the other rooms.
Given an array rooms where rooms[i] is the set of keys that you can obtain if you visited room i, return true if you can visit all the rooms, or false otherwise.
?
Input: rooms = [[1],[2],[3],[]]
Output: true
Explanation:
We visit room 0 and pick up key 1.
We then visit room 1 and pick up key 2.
We then visit room 2 and pick up key 3.
We then visit room 3.
Since we were able to visit every room, we return true.
Input: rooms = [[1,3],[3,0,1],[2],[0]]
Output: false
Explanation: We can not enter room number 2 since the only key that unlocks it is in that room.
From: LeetCode
Link: 841. Keys and Rooms
void dfs(int** rooms, int roomsSize, int* roomsColSize, bool* visited, int room) {
visited[room] = true; // Mark the current room as visited
for (int i = 0; i < roomsColSize[room]; i++) {
int key = rooms[room][i];
if (!visited[key]) {
dfs(rooms, roomsSize, roomsColSize, visited, key);
}
}
}
bool canVisitAllRooms(int** rooms, int roomsSize, int* roomsColSize) {
bool visited[roomsSize]; // Array to keep track of visited rooms
for (int i = 0; i < roomsSize; i++) {
visited[i] = false; // Initially, no room is visited
}
dfs(rooms, roomsSize, roomsColSize, visited, 0); // Start DFS from room 0
// Check if all rooms have been visited
for (int i = 0; i < roomsSize; i++) {
if (!visited[i]) {
return false; // If any room is not visited, return false
}
}
return true; // All rooms visited
}