📖 Scenario: Imagine a small rat trying to find its way through a maze to reach the cheese. The maze is a grid where some cells are open paths and others are walls. The rat can only move right or down. Your task is to help the rat find a path from the top-left corner to the bottom-right corner.
🎯 Goal: Build a program that represents the maze as a 2D array, sets up a solution grid, finds a path for the rat using backtracking, and prints the path taken by the rat.
📋 What You'll Learn
Create a 2D array called maze with the exact values given.
Create a 2D array called solution initialized with zeros.
Write a function solveMaze that finds a path from start to end using backtracking.
Print the solution grid showing the path with 1s.
💡 Why This Matters
🌍 Real World
Maze solving algorithms are used in robotics for pathfinding and navigation in unknown environments.
💼 Career
Understanding backtracking and pathfinding is important for software engineers working in game development, robotics, and AI.
Progress0 / 4 steps
1
Create the maze grid
Create a 2D array called maze with these exact values: [[1, 0, 0, 0], [1, 1, 0, 1], [0, 1, 0, 0], [1, 1, 1, 1]]. Here, 1 means open path and 0 means wall.
DSA Typescript
Hint
Use const maze: number[][] = [...] to create the 2D array with the exact values.
2
Create the solution grid
Create a 2D array called solution with the same size as maze, filled with zeros.
DSA Typescript
Hint
Create solution as a 2D array with zeros matching the maze size.
3
Write the backtracking function
Write a function called solveMaze that takes maze, solution, x, and y as parameters. Use backtracking to find a path from top-left (0,0) to bottom-right (3,3). Mark the path in solution with 1s. Return true if path found, else false. Use only moves right (x + 1) and down (y + 1).
DSA Typescript
Hint
Use recursion and backtracking. Check if current cell is safe, mark it, try moving right and down, backtrack if needed.
4
Print the solution path
Call solveMaze(maze, solution, 0, 0) to find the path. If path found, print the solution grid row by row. Each row should be printed as space-separated numbers.
DSA Typescript
Hint
Call solveMaze(maze, solution, 0, 0). If it returns true, print each row of solution with spaces.
Practice
(1/5)
1. What is the main goal of the Rat in a Maze Problem in data structures and algorithms?
easy
A. Sort the cells of the maze in ascending order
B. Count the number of walls in the maze
C. Calculate the shortest distance between two points in a graph
D. Find a path from the start to the destination in a maze
Solution
Step 1: Understand the problem context
The Rat in a Maze problem involves navigating through a maze represented as a grid to find a path from the start cell to the destination cell.
Step 2: Identify the goal
The goal is to find a valid path that the rat can follow to reach the destination without crossing walls or blocked cells.
Final Answer:
Find a path from the start to the destination in a maze -> Option D
Quick Check:
Goal = Find path [OK]
Hint: Remember: Rat must find a path, not count or sort cells [OK]
Common Mistakes:
Confusing path finding with counting walls
Thinking the problem is about sorting cells
Assuming shortest path is always required
2. Which of the following is the correct TypeScript syntax to declare a 2D maze array of size 4x4 filled with zeros?
easy
A. const maze: number[][] = Array.from({length: 4}, () => Array(4).fill(0));
B. const maze: number[][] = [[0]*4]*4;
C. const maze: number[][] = new Array(4, 4).fill(0);
D. const maze: number[][] = Array(4).fill(Array(4).fill(0));
Solution
Step 1: Understand array initialization in TypeScript
Using Array.from with a mapping function creates independent inner arrays, avoiding reference issues.
Step 2: Analyze each option
const maze: number[][] = Array(4).fill(Array(4).fill(0)); creates inner arrays by reference, causing all rows to point to the same array. const maze: number[][] = Array.from({length: 4}, () => Array(4).fill(0)); correctly creates separate arrays for each row. Options B and C use invalid syntax for 2D arrays.
Starting at (0,0), the rat moves down to (1,0) since maze[1][0] = 1. Then right to (1,1), down to (2,1), down to (3,1), right to (3,2), and right to (3,3).
Step 2: Verify path validity and output
All these cells are safe (value 1). The path is recorded and printed as shown in (0,0) -> (1,0) -> (1,1) -> (2,1) -> (3,1) -> (3,2) -> (3,3).
Hint: Follow down then right moves recursively to find path [OK]
Common Mistakes:
Assuming movement to blocked cells (0 values)
Confusing row and column indices
Ignoring backtracking when path fails
4. Identify the bug in the following TypeScript code snippet for the Rat in a Maze problem:
function solveMaze(x: number, y: number, path: string[]): boolean {
if (x === 3 && y === 3) {
path.push(`(${x},${y})`);
return true;
}
if (isSafe(x, y)) {
path.push(`(${x},${y})`);
if (solveMaze(x + 1, y, path)) return true;
if (solveMaze(x, y + 1, path)) return true;
path.pop();
}
return false;
}
medium
A. isSafe function is not called before pushing to path
B. Incorrect base case coordinates for destination
C. Missing backtracking step to remove current cell from path when dead end is reached
D. The function should move left and up instead of right and down
Solution
Step 1: Analyze the recursion and path tracking
The function adds the current cell to path but does not remove it if both recursive calls fail, causing incorrect path accumulation.
Step 2: Identify missing backtracking
Backtracking requires removing the current cell from path when no path forward is found, which is missing here.
Final Answer:
Missing backtracking step to remove current cell from path when dead end is reached -> Option C
Quick Check:
Backtracking needed = Missing backtracking step to remove current cell from path when dead end is reached [OK]
Hint: Always pop path on dead ends to backtrack [OK]
Common Mistakes:
Forgetting to remove cell from path on failure
Incorrect base case coordinates
Ignoring isSafe checks before path push
5. You want to modify the Rat in a Maze algorithm to find all possible paths from start (0,0) to destination (N-1,N-1) in an NxN maze. Which approach should you use?
hard
A. Use backtracking to explore all safe moves, storing each complete path separately
B. Stop at the first found path and return immediately
C. Use a greedy approach to always move right or down only
D. Convert the maze to a graph and use Dijkstra's algorithm to find shortest path
Solution
Step 1: Understand the requirement to find all paths
Finding all paths requires exploring every possible route without stopping at the first success.
Step 2: Choose backtracking to explore all safe moves
Backtracking allows exploring all safe moves recursively, storing each complete path separately before backtracking to try other routes.
Final Answer:
Use backtracking to explore all safe moves, storing each complete path separately -> Option A
Quick Check:
All paths = Backtracking exploration [OK]
Hint: Backtrack fully to find all paths, not just one [OK]
Common Mistakes:
Stopping after first path found
Using greedy moves that miss paths
Using shortest path algorithms instead of all paths
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.