diff --git a/keys and rooms.cpp b/keys and rooms.cpp new file mode 100644 index 0000000..85419e3 --- /dev/null +++ b/keys and rooms.cpp @@ -0,0 +1,23 @@ +class Solution { + public boolean canVisitAllRooms(List> rooms) { + boolean[] seen = new boolean[rooms.size()]; + seen[0] = true; + Stack stack = new Stack(); + stack.push(0); + + //At the beginning, we have a todo list "stack" of keys to use. + //'seen' represents at some point we have entered this room. + while (!stack.isEmpty()) { // While we have keys... + int node = stack.pop(); // Get the next key 'node' + for (int nei: rooms.get(node)) // For every key in room # 'node'... + if (!seen[nei]) { // ...that hasn't been used yet + seen[nei] = true; // mark that we've entered the room + stack.push(nei); // add the key to the todo list + } + } + + for (boolean v: seen) // if any room hasn't been visited, return false + if (!v) return false; + return true; + } +}