Shortest Path in Binary Matrix

Algorithms
Medium
Amazon
71K views

Given an $n \times n$ binary matrix `grid`, return the length of the shortest clear path from the top-left to the bottom-right corner. A clear path uses only cells with 0. Use BFS.

Why Interviewers Ask This

Amazon asks this question to evaluate a candidate's mastery of Breadth-First Search (BFS) for unweighted shortest path problems. They specifically look for the ability to handle edge cases like blocked start/end points and to implement queue-based traversal efficiently without recursion depth issues, reflecting their emphasis on operational excellence and clean, scalable code.

How to Answer This Question

1. Clarify requirements: Confirm if diagonal moves are allowed (yes here), define return value (-1 vs length), and check constraints. 2. Validate inputs: Immediately check if grid[0][0] or grid[n-1][n-1] is 1; return -1 instantly if blocked. 3. Initialize BFS: Create a queue storing coordinates and distance, add start node with distance 1, and maintain a visited set or modify grid in-place to avoid cycles. 4. Execute traversal: Loop while queue is not empty, dequeue current cell, check all 8 neighbors, and enqueue valid 0s with incremented distance. 5. Optimize and verify: Stop immediately upon reaching the bottom-right corner to ensure shortest path, then return the distance or -1 if queue empties. This structured approach demonstrates Amazon's 'Deliver Results' principle by prioritizing early exits and efficient resource usage.

Key Points to Cover

  • Explicitly handling the edge case where start or end nodes are blocked
  • Correctly implementing 8-directional movement logic including diagonals
  • Using BFS to guarantee the shortest path in an unweighted grid
  • Optimizing space by modifying the input grid or using a visited set effectively
  • Implementing an early exit condition once the destination is reached

Sample Answer

To solve the Shortest Path in Binary Matrix problem efficiently, I would first validate the input matrix. If the starting cell at [0,0] or the destination at [n-1,n-1] contains a 1, we cannot form a path, so I would return -1 immediately. This handles the most common edge case upfront. Next, I would implement a Breadth-First Search (BFS) using a queue since BFS guarantees the shortest path in an unweighted graph. I will initialize the queue with the top-left coordinate and a distance of 1. To track visited cells and prevent infinite loops, I can either use a separate boolean matrix or mark visited cells directly in the input grid by changing 0s to 1s, which saves space. Inside the main loop, I will process each level of the queue. For every cell popped, I will explore all eight possible directions (horizontal, vertical, and diagonal). If a neighbor is within bounds, is a 0, and hasn't been visited, I add it to the queue with the current distance plus one. Crucially, as soon as I encounter the bottom-right cell, I return the current distance. This early exit optimization is vital for performance. If the queue becomes empty without reaching the target, I return -1. This approach ensures O(N^2) time complexity and O(N^2) space complexity in the worst case, balancing efficiency with readability, which aligns well with Amazon's focus on practical, high-performance solutions.

Common Mistakes to Avoid

  • Forgetting to check if the starting or ending cell is blocked before running BFS
  • Only checking 4 cardinal directions instead of the required 8 directions
  • Failing to mark cells as visited, leading to infinite loops and Time Limit Exceeded errors
  • Returning the number of edges instead of the number of nodes (path length)

Practice This Question with AI

Answer this question orally or via text and get instant AI-powered feedback on your response quality, structure, and delivery.

Start Practicing

Related Interview Questions

Browse all 145 Algorithms questionsBrowse all 73 Amazon questions