Maze Solver - Backtracking
Watch recursive backtracking explore the maze, hit dead ends, and intelligently backtrack to find the solution path.
Backtracking Algorithm
O(4^(m×n)) Time
Path Finding
Controls
Legend
Start Position
Goal Position
Current Position
Current Path
Backtracking
Visited Cell
Wall
Algorithm Status
Recursion Depth:0
Path Length:0
Action: START
Solution: Searching...
Current Step
Step 1 of 0
Click Start to begin solving the maze
Maze Visualization
Algorithm: Recursive Backtracking
Strategy: Depth-First Search
Python Implementation
def solve_maze(maze, row, col, end_row, end_col, visited, path):
# Mark current cell as visited
visited[row][col] = True
path.append((row, col))
# Check if we reached the goal
if row == end_row and col == end_col:
return True # Solution found!
# Try all four directions: right, down, left, up
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
for dr, dc in directions:
new_row, new_col = row + dr, col + dc
# Check if new position is valid
if (is_valid(new_row, new_col, maze, visited)):
# Recursive call
if solve_maze(maze, new_row, new_col, end_row, end_col, visited, path):
return True
# Backtrack: remove current cell from path
path.pop()
visited[row][col] = False
return False
def is_valid(row, col, maze, visited):
return (0 <= row < len(maze) and
0 <= col < len(maze[0]) and
maze[row][col] == 0 and
not visited[row][col])
# Solve 7×7 maze
path = []
visited = [[False] * 7 for _ in range(7)]
solution_exists = solve_maze(maze, 1, 1, 5, 5, visited, path)
JavaScript Implementation
function solveMaze(maze, row, col, endRow, endCol, visited, path) {
visited[row][col] = true;
path.push([row, col]);
// Check if we reached the goal
if (row === endRow && col === endCol) {
return true;
}
// Try all directions
const directions = [[0,1], [1,0], [0,-1], [-1,0]];
for (let [dr, dc] of directions) {
const newRow = row + dr;
const newCol = col + dc;
if (isValid(newRow, newCol, maze, visited)) {
if (solveMaze(maze, newRow, newCol, endRow, endCol, visited, path)) {
return true;
}
}
}
// Backtrack
path.pop();
visited[row][col] = false;
return false;
}
function isValid(row, col, maze, visited) {
return row >= 0 && row < maze.length &&
col >= 0 && col < maze[0].length &&
maze[row][col] === 0 && !visited[row][col];
}
Algorithm Analysis
Complexity Analysis
- • Time Complexity: O(4^(m×n)) worst case
- • Space Complexity: O(m×n) for recursion stack
- • Strategy: Depth-First Search with backtracking
- • Optimization: Early termination when solution found
- • Memory: Visited array prevents cycles
Backtracking Pattern
- • Explore: Try a path
- • Mark: Record current state
- • Recurse: Go deeper
- • Backtrack: Undo if failed
- • Systematic: Try all possibilities
Real-World Applications
- • Robotics: Path planning and navigation
- • Game AI: NPC movement and pathfinding
- • GPS Systems: Route finding algorithms
- • Network Routing: Packet path selection
- • Puzzle Games: Solution verification
- • Circuit Design: Wire routing on PCBs
Algorithm Variations
- • A* Search: Uses heuristics for efficiency
- • Dijkstra's: Finds shortest weighted paths
- • BFS: Finds shortest unweighted paths
- • Wall Follower: Simple maze solving rule