Keys and Rooms

Problem Description

rooms = [[1],[2],[3],[]]
# Each index represents a room, and each sub-list represents the array
# of keys behind that room

Solution Explanation

Implementation

class Solution:

    def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:

        visited = set() # start by initalizing a visited set

        stack = [0]                    # start in room 0

        while stack:

            room = stack.pop() # popped element here is the room we're in

            if room in visited:

                continue

            visited.add(room)

            for key in rooms[room]:    # each key opens another room

                if key not in visited:

                    stack.append(key)

        return len(visited) == len(rooms)
class Solution:
	def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
		seen = set()
		seen.add(0)
		
		def dfs(room):
			for key in rooms[room]:
				if key in seen:
					continue
				seen.add(key)
				dfs(key) # we initalize the recursive search here
		dfs(0)
		return len(seen) == len(rooms)