📖 Scenario: Imagine a rat trapped in a maze represented by a grid. The rat wants to find a path from the top-left corner to the bottom-right corner by moving only through open cells.
🎯 Goal: Build a program that finds one possible path for the rat to reach the destination in the maze using backtracking.
📋 What You'll Learn
Create a 4x4 maze grid with 1s as open paths and 0s as blocked cells
Create a solution grid to mark the path taken by the rat
Write a function to check if a move is safe (inside grid and open path)
Write a recursive function to find the path using backtracking
Print the solution grid showing the path from start to finish
💡 Why This Matters
🌍 Real World
Maze solving algorithms are used in robotics for navigation and path planning in unknown environments.
💼 Career
Understanding backtracking and pathfinding is important for software roles involving algorithms, game development, and AI.
Progress0 / 4 steps
1
Create the maze grid
Create a 4x4 array called maze with these exact rows: [1, 0, 0, 0], [1, 1, 0, 1], [0, 1, 0, 0], [1, 1, 1, 1]
Write a function called solveMaze that takes maze, solution, x, and y as parameters. Use recursion and backtracking to find a path from (0, 0) to (3, 3). Mark the path in solution with 1s. Use a helper function isSafe to check if a move is valid.
DSA Javascript
Hint
Use recursion to try moving right and down. Mark path in solution. Backtrack if stuck.
4
Print the solution path
Call solveMaze(maze, solution, 0, 0) and then print the solution array to show the path found by the rat.
DSA Javascript
Hint
Call solveMaze(maze, solution, 0, 0) and print each row of solution with spaces.
Practice
(1/5)
1. What is the main goal of the Rat in a Maze problem in algorithms?
easy
A. Calculate the shortest distance between two points in a graph
B. Count the number of walls in the maze
C. Find a path from the start to the destination in a maze
D. Sort the maze cells in ascending order
Solution
Step 1: Understand the problem objective
The Rat in a Maze problem requires finding a path from the start cell to the destination cell in a maze grid.
Step 2: Identify the correct goal
The goal is not counting walls, sorting cells, or shortest distance in a graph, but specifically finding a valid path through the maze.
Final Answer:
Find a path from the start to the destination in a maze -> Option C
Quick Check:
Goal = Find path [OK]
Hint: Focus on pathfinding from start to end in the maze [OK]
Common Mistakes:
Confusing pathfinding with counting or sorting
Thinking it's about shortest path always
Assuming maze cells need sorting
2. Which of the following is the correct way to check if a cell (x, y) is safe to move in a maze represented by a 2D array maze in JavaScript?
easy
A. if (x >= 0 && y >= 0 && x <= maze.length && y <= maze[0].length && maze[x][y] === 0)
B. if (x >= 0 && y >= 0 && x < maze.length && y < maze[0].length && maze[x][y] === 1)
C. if (x > 0 && y > 0 && x <= maze.length && y <= maze[0].length && maze[x][y] === 1)
D. if (x > 0 && y > 0 && x < maze.length && y < maze[0].length && maze[x][y] === 0)
Solution
Step 1: Check boundary conditions correctly
Valid indices in JavaScript arrays start at 0 and go up to length - 1, so conditions must use >= 0 and < length.
Step 2: Check cell value for path
In the Rat in a Maze problem, 1 usually means path is open, so maze[x][y] === 1 is correct.
Final Answer:
if (x >= 0 && y >= 0 && x < maze.length && y < maze[0].length && maze[x][y] === 1) -> Option B
Quick Check:
Boundary + path check = if (x >= 0 && y >= 0 && x < maze.length && y < maze[0].length && maze[x][y] === 1) [OK]
Hint: Use >= 0 and < length for array bounds, check for 1 as path [OK]
Common Mistakes:
Using > 0 excludes index 0
Using <= length causes out-of-bound errors
Checking for 0 instead of 1 as path
3. What will be the output of the following JavaScript code snippet for the Rat in a Maze problem?
const maze = [
[1, 0, 0, 0],
[1, 1, 0, 1],
[0, 1, 0, 0],
[1, 1, 1, 1]
];
function solveMaze(x, y, maze, path) {
if (x === maze.length - 1 && y === maze[0].length - 1) {
path.push([x, y]);
return true;
}
if (x >= 0 && y >= 0 && x < maze.length && y < maze[0].length && maze[x][y] === 1) {
path.push([x, y]);
maze[x][y] = 0;
if (solveMaze(x + 1, y, maze, path)) return true;
if (solveMaze(x, y + 1, maze, path)) return true;
path.pop();
return false;
}
return false;
}
const path = [];
solveMaze(0, 0, maze, path);
console.log(path);
medium
A. [[0,0],[0,1],[1,1],[2,1],[3,1],[3,2],[3,3]]
B. []
C. [[0,0],[1,0],[1,1],[1,2],[2,2],[3,2],[3,3]]
D. [[0,0],[1,0],[1,1],[2,1],[3,1],[3,2],[3,3]]
Solution
Step 1: Trace the recursive path from (0,0)
Starting at (0,0), the function tries moving down (x+1,y) first, then right (x,y+1). It marks visited cells as 0 to avoid revisiting.
Step 2: Follow the path found
The path found is (0,0) -> (1,0) -> (1,1) -> (2,1) -> (3,1) -> (3,2) -> (3,3), which is a valid path to the destination.
Final Answer:
[[0,0],[1,0],[1,1],[2,1],[3,1],[3,2],[3,3]] -> Option D
Hint: Follow down moves first, then right moves recursively [OK]
Common Mistakes:
Assuming right moves tried before down
Not marking visited cells causing infinite loops
Misreading maze cell values
4. Identify the bug in the following JavaScript code snippet for the Rat in a Maze problem and select the fix.
function solveMaze(x, y, maze, path) {
if (x === maze.length - 1 && y === maze[0].length - 1) {
path.push([x, y]);
return true;
}
if (x >= 0 && y >= 0 && x < maze.length && y < maze[0].length && maze[x][y] === 1) {
path.push([x, y]);
if (solveMaze(x + 1, y, maze, path)) return true;
if (solveMaze(x, y + 1, maze, path)) return true;
path.pop();
return false;
}
return false;
}
medium
A. Mark visited cells as 0 after pushing to path to avoid revisiting
B. Remove path.pop() to keep all visited cells in path
C. Change base case to check if x > maze.length and y > maze[0].length
D. Add a check to move diagonally (x+1, y+1) in recursion
Solution
Step 1: Identify missing visited marking
The code does not mark visited cells as 0, so it may revisit the same cell causing infinite recursion.
Step 2: Fix by marking visited cells
After pushing a cell to path, mark maze[x][y] = 0 to avoid revisiting and infinite loops.
Final Answer:
Mark visited cells as 0 after pushing to path to avoid revisiting -> Option A
Quick Check:
Visited marking fixes infinite recursion [OK]
Hint: Mark visited cells to prevent infinite loops [OK]
Common Mistakes:
Forgetting to mark visited cells
Removing path.pop() causing wrong paths
Changing base case incorrectly
5. Given a maze represented by a 2D array where 1 means open path and 0 means blocked, how would you modify the Rat in a Maze algorithm to find all possible paths from start (0,0) to destination (n-1,n-1)?
hard
A. Use backtracking to explore all directions and store each complete path in a list
B. Stop recursion after finding the first path and return it immediately
C. Use a queue to perform breadth-first search and return the shortest path only
D. Mark all visited cells permanently to avoid revisiting any cell
Solution
Step 1: Understand the requirement to find all paths
Finding all paths means exploring every possible route from start to destination without stopping at the first success.
Step 2: Use backtracking to explore all paths
Backtracking allows exploring all directions, storing each valid path, and backtracking to try other routes.
Final Answer:
Use backtracking to explore all directions and store each complete path in a list -> Option A
Quick Check:
All paths require full backtracking exploration [OK]
Hint: Backtrack fully and save each path to find all solutions [OK]
Common Mistakes:
Stopping after first path found
Using BFS only for shortest path
Marking visited cells permanently blocking other paths
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.