← Graph Exploration

Micro-Drill #232 — Shortest path BFS (grid)

Graph Exploration Target: 15s

BFS guarantees shortest path in unweighted grid. Mark visited WHEN ADDING to queue (not when popping). O(m*n).

from collections import deque

def shortestPath(grid, start, end):
    m, n = len(grid), len(grid[0])
    q = deque([(start[0], start[1], 0)])
    visited = {(start[0], start[1])}
    while q:
        r, c, dist = q.popleft()
        if (r, c) == tuple(end):
            return dist
        for dr, dc in (0,1),(0,-1),(1,0),(-1,0):
            nr, nc = r + dr, c + dc
            if (0 <= nr < m and 0 <= nc < n
                and grid[nr][nc] == 0
                and (nr, nc) not in visited):
                visited.add((nr, nc))
                q.append((nr, nc, dist + 1))
    return -1

Type it from memory. Go.

Practice Problems

Related Coding Drills

← Micro #231 Micro #233 →