Problem Statement
leetcode problem link
My Solution [Accepted]
class Solution:
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
graph = defaultdict(list)
for i, keys in enumerate(rooms):
graph[i] = keys[:]
visited = set()
def dfs(index):
visited.add(index)
for nei in graph[index]:
if nei not in visited:
dfs(nei)
dfs(0)
return len(rooms) == len(visited)
Editorial
class Solution(object):
def canVisitAllRooms(self, rooms):
seen = [False] * len(rooms)
seen[0] = True
stack = [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: #While we have keys...
node = stack.pop() # get the next key 'node'
for nei in rooms[node]: # For every key in room # 'node'...
if not seen[nei]: # ... that hasn't been used yet
seen[nei] = True # mark that we've entered the room
stack.append(nei) # add the key to the todo list
return all(seen) # Return true iff we've visited every room