graph November 21, 2022

Nearest exit from entrance in maze

Time O(mn) Space O(mn) Open original problem

We will start from the entrance, run BFS through the matrix and find the nearest exit. If we can't find the exit, we will return -1.

class Solution:
    def nearestExit(self, maze: List[List[str]], entrance: List[int]) -> int:
        ROWS, COLS = len(maze), len(maze[0])

        directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
        visited = set([tuple(entrance)])
        q = collections.deque([tuple(entrance)])

        steps = 0
        while q:
            qLen = len(q)
            for _ in range(qLen):
                r, c = q.pop()
                if (0 in [r, c] or r == ROWS-1 or c == COLS-1) and [r, c] != entrance:
                    return steps
                for dr, dc in directions:
                    x, y = r+dr, c+dc
                    if 0<=x<ROWS and 0<=y<COLS and maze[x][y] == '.' and (x, y) not in visited:
                        visited.add((x,y))
                        q.appendleft((x,y))
            steps += 1

        return -1

Time complexity: O(mn)
Space complexity: O(mn)