LeetCode Problem

How to Solve Minimum Moves to Move a Box to Their Target Location

This problem requires finding the minimal number of box pushes to reach the target location. The key is representing each state as a combination of player and box positions and exploring all reachable moves using a breadth-first search with a priority queue. Tracking visited states carefully avoids redundant computations and ensures optimal results even in tight or complex warehouse grids.

GhostInterview Help

Need help with Minimum Moves to Move a Box to Their Target Location without spending extra time grinding it?

GhostInterview can read Minimum Moves to Move a Box to Their Target Location from a screenshot, generate the answer path, explain the complexity, and support solver-first interview workflows when you need direct help fast.

Screenshot Input

Capture the prompt fast instead of rewriting the problem by hand.

Answer + Complexity

Get the solution path, trade-offs, and complexity summary in one pass.

Stealth Workflow

Stay outside captured layers on supported screen-share workflows.

Problem #1263Array plus Breadth-First SearchReviewed 2026-03-08
Difficulty
Hard
Primary pattern
Array plus Breadth-First Search
Answer-first problem summary
Step-by-step approach and complexity
GhostInterview solver workflow

This problem requires finding the minimal number of box pushes to reach the target location. The key is representing each state as a combination of player and box positions and exploring all reachable moves using a breadth-first search with a priority queue. Tracking visited states carefully avoids redundant computations and ensures optimal results even in tight or complex warehouse grids.

Problem Statement

You are given an m x n grid representing a warehouse where a storekeeper can push a single box to a target location. Each cell is either a wall '#', empty floor '.', the player 'S', the box 'B', or the target 'T'. The player can move freely on empty floor cells and push the box if positioned directly adjacent and the next cell is free. Your goal is to determine the minimum number of pushes required to move the box to the target.

Movement rules enforce that the player can only push, not pull, the box. Pushing counts as one move, while walking around without pushing does not. The grid always contains exactly one player, one box, and one target. Walls block both the player and box, making pathfinding and careful state tracking essential. If reaching the target is impossible, return -1.

Examples

Example 1

Input: grid = [["#","#","#","#","#","#"], ["#","T","#","#","#","#"], ["#",".",".","B",".","#"], ["#",".","#","#",".","#"], ["#",".",".",".","S","#"], ["#","#","#","#","#","#"]]

Output: 3

We return only the number of times the box is pushed.

Example 2

Input: grid = [["#","#","#","#","#","#"], ["#","T","#","#","#","#"], ["#",".",".","B",".","#"], ["#","#","#","#",".","#"], ["#",".",".",".","S","#"], ["#","#","#","#","#","#"]]

Output: -1

Example details omitted.

Example 3

Input: grid = [["#","#","#","#","#","#"], ["#","T",".",".","#","#"], ["#",".","#","B",".","#"], ["#",".",".",".",".","#"], ["#",".",".",".","S","#"], ["#","#","#","#","#","#"]]

Output: 5

push the box down, left, left, up and up.

Constraints

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 20
  • grid contains only characters '.', '#', 'S', 'T', or 'B'.
  • There is only one character 'S', 'B', and 'T' in the grid.

Solution Approach

State Representation

Represent each search state as a tuple (player_row, player_col, box_row, box_col). This explicitly tracks both player and box positions and allows BFS to explore valid pushes and moves without revisiting identical configurations.

Breadth-First Search with Priority

Use BFS to explore all reachable positions, prioritizing states with fewer box pushes. For each state, check all four directions to see if the player can reach the position behind the box to push it forward, and enqueue resulting states if unvisited.

Visited States and Optimization

Maintain a visited set keyed by (box_row, box_col, player_row, player_col) to avoid cycles. For efficiency, only consider pushing actions that advance the box toward the target, pruning paths that cannot improve the current minimum number of pushes.

Complexity Analysis

MetricValue
TimeDepends on the final approach
SpaceDepends on the final approach

Time complexity depends on the number of reachable states, which is O(mnmn) in the worst case, as each combination of player and box positions can be explored. Space complexity similarly depends on storing visited states and BFS queue, requiring O(mnmn) memory in the worst case.

What Interviewers Usually Probe

  • Expect clear state representation combining player and box positions.
  • Ask about BFS versus DFS trade-offs for minimizing box pushes.
  • Look for handling of unreachable states and pruning redundant paths.

Common Pitfalls or Variants

Common pitfalls

  • Confusing player movement with box pushes; only pushes count.
  • Not tracking visited states fully with both player and box positions, leading to infinite loops.
  • Failing to validate that the player can reach the push position before attempting a box push.

Follow-up variants

  • Multiple boxes and targets requiring multi-object BFS.
  • Adding weighted pushes where each push has a cost instead of uniform counting.
  • Larger grids with teleporters or moving obstacles affecting reachability.

How GhostInterview Helps

  • Automatically tracks both player and box positions in each state to simplify BFS implementation.
  • Highlights unreachable paths early to reduce unnecessary computations in complex grid layouts.
  • Provides step-by-step exploration of minimum pushes with clear updates for each candidate move.

Topic Pages

FAQ

What is the best approach to solve Minimum Moves to Move a Box to Their Target Location?

Represent each state as (player_row, player_col, box_row, box_col) and use BFS with a priority queue to count minimal box pushes efficiently.

Do I need to count player moves without pushing?

No, only pushes count toward the move total; player walking without pushing does not increment the count.

Can the box be pulled instead of pushed?

No, the rules only allow pushing; your BFS must ensure the player is in position behind the box before pushing.

What data structures help avoid revisiting states?

Use a set or hash map keyed by both box and player positions to track visited states and prevent cycles.

How does the Array plus Breadth-First Search pattern apply here?

The grid is represented as a 2D array, and BFS systematically explores all reachable box pushes, optimizing with state tracking and priority.

GhostInterview Solver

Need direct help with Minimum Moves to Move a Box to Their Target Location instead of spending more time grinding it?

Download GhostInterview when you want a LeetCode solver, not another long practice loop. Capture Minimum Moves to Move a Box to Their Target Location from a screenshot, get the answer path and complexity, and use supported stealth workflows that stay outside captured layers.

Screenshot Input

Capture the prompt fast instead of rewriting the problem by hand.

Answer + Complexity

Get the solution path, trade-offs, and complexity summary in one pass.

Stealth Workflow

Stay outside captured layers on supported screen-share workflows.