📖 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 path for the rat from start to finish in the maze and prints the path as a grid showing the route.
📋 What You'll Learn
Create a 4x4 maze grid with 1s as open paths and 0s as blocked cells
Create a 4x4 solution grid initialized with 0s
Write a function to check if a cell is safe to move into
Write a recursive function to find the path from start to finish
Print the solution grid showing the path with 1s
💡 Why This Matters
🌍 Real World
Maze solving algorithms are used in robotics for path planning and navigation.
💼 Career
Understanding recursion and backtracking helps in solving complex problems in software development and algorithm design.
Progress0 / 4 steps
1
Create the maze grid
Create a 2D integer array called maze with size 4x4 and initialize it with these exact values: {{1, 0, 0, 0}, {1, 1, 0, 1}, {0, 1, 0, 0}, {1, 1, 1, 1}}
DSA C++
Hint
Use a 2D array with exact values for the maze layout.
2
Create the solution grid
Create a 2D integer array called solution with size 4x4 and initialize all elements to 0
DSA C++
Hint
Initialize the solution grid with zeros to mark no path yet.
3
Write the function to solve the maze
Write a recursive function called solveMaze that takes parameters maze, solution, x, and y. It should check if the current cell is safe, mark it in solution, and recursively try to move right or down to find the path to the bottom-right corner. Return true if path found, else false.
DSA C++
Hint
Use recursion to try moving right (x+1, y) and down (x, y+1). Mark path in solution grid.
4
Print the solution path
Write code to call solveMaze starting at (0, 0) and then print the solution grid row by row, with spaces between numbers.
DSA C++
Hint
Call solveMaze(maze, solution, 0, 0) and print the solution grid row by row.
Practice
(1/5)
1. What is the main goal of the Rat in a Maze Problem in Data Structures & Algorithms?
easy
A. Find a path from the start to the destination in a maze
B. Count the number of walls in the maze
C. Calculate the shortest distance between two points in a graph
D. Sort the maze cells in ascending order
Solution
Step 1: Understand the problem context
The Rat in a Maze problem involves navigating a maze represented by a grid to find a path from the start cell to the destination cell.
Step 2: Identify the main objective
The main objective is to find a valid path through open cells (usually marked as 1) from the start to the end point.
Final Answer:
Find a path from the start to the destination in a maze -> Option A
Quick Check:
Goal = Find path [OK]
Hint: Focus on pathfinding, not counting or sorting [OK]
Common Mistakes:
Confusing pathfinding with counting walls
Thinking it's about sorting cells
Assuming it's about shortest distance always
2. Which of the following is the correct way to declare a 2D maze array of size 4x4 in C++?
easy
A. int maze[4][4];
B. int maze(4,4);
C. int maze[4,4];
D. int maze{4,4};
Solution
Step 1: Recall C++ array declaration syntax
In C++, a 2D array is declared using square brackets for each dimension, like int maze[4][4];.
Step 2: Analyze each option
int maze[4][4]; uses correct syntax. int maze(4,4); uses parentheses which is invalid for arrays. int maze[4,4]; uses comma inside brackets which is incorrect. int maze{4,4}; uses braces which is invalid for declaration.
Final Answer:
int maze[4][4]; -> Option A
Quick Check:
2D array = int maze[4][4]; [OK]
Hint: Use square brackets for array dimensions [OK]
Common Mistakes:
Using parentheses instead of brackets
Using commas inside brackets
Using braces for declaration
3. Consider the following C++ code snippet for a 2x2 maze where 1 means open path and 0 means blocked:
int maze[2][2] = {{1, 0}, {1, 1}};
bool solveMaze(int maze[2][2], int x, int y) {
if (x == 1 && y == 1) return true;
if (x < 0 || y < 0 || x >= 2 || y >= 2 || maze[x][y] == 0) return false;
if (solveMaze(maze, x + 1, y)) return true;
if (solveMaze(maze, x, y + 1)) return true;
return false;
}
int main() {
bool result = solveMaze(maze, 0, 0);
std::cout << (result ? "Path Found" : "No Path") << std::endl;
return 0;
}
What will be the output when this program runs?
medium
A. Runtime Error
B. No Path
C. Compilation Error
D. Path Found
Solution
Step 1: Trace the recursive calls starting at (0,0)
At (0,0), maze[0][0] = 1 (open). Try moving down to (1,0): maze[1][0] = 1 (open). From (1,0), try moving down to (2,0) invalid, then right to (1,1): maze[1][1] = 1 (open) and is destination.
Step 2: Confirm path existence
Since (1,1) is reached, function returns true and prints "Path Found".
Final Answer:
Path Found -> Option D
Quick Check:
Valid path exists = Path Found [OK]
Hint: Follow recursion down and right moves [OK]
Common Mistakes:
Ignoring boundary checks
Assuming no path due to blocked cell
Confusing indices order
4. The following code snippet is intended to solve the Rat in a Maze problem but has a bug:
bool solveMaze(int maze[3][3], int x, int y) {
if (x == 2 && y == 2) return true;
if (x > 2 || y > 2 || maze[x][y] == 0) return false;
if (solveMaze(maze, x + 1, y)) return true;
if (solveMaze(maze, x, y + 1)) return true;
return false;
}
What is the bug in this code?
medium
A. Missing check for negative indices
B. No check for maze boundaries less than zero
C. No check for visited cells causing infinite recursion
D. Incorrect base case coordinates
Solution
Step 1: Analyze boundary and base case checks
The code checks if x or y are greater than 2 and if the cell is blocked. It returns true if destination (2,2) is reached.
Step 2: Identify missing visited check
There is no mechanism to mark visited cells, so the recursion can revisit the same cells repeatedly, causing infinite recursion or stack overflow.
Final Answer:
No check for visited cells causing infinite recursion -> Option C
Quick Check:
Visited check missing = Infinite recursion [OK]
Hint: Always mark visited cells to avoid loops [OK]
Write a function to find one path from (0,0) to (3,3) moving only right or down. Which of the following describes the correct approach?
hard
A. Use depth-first search but only move left and up
B. Use backtracking to explore right and down moves, marking visited cells to avoid cycles
C. Use breadth-first search without marking visited cells
D. Use a greedy approach always moving right first without backtracking
Solution
Step 1: Understand movement constraints and maze structure
The rat can move only right or down. The maze has blocked cells (0) and open cells (1). We need to find a path from top-left to bottom-right.
Step 2: Choose correct algorithm approach
Backtracking explores all possible paths by moving right or down, marking visited cells to avoid revisiting and infinite loops. Greedy or BFS without visited checks can fail or loop.
Final Answer:
Use backtracking to explore right and down moves, marking visited cells to avoid cycles -> Option B
Quick Check:
Backtracking + visited = Correct approach [OK]
Hint: Backtrack with visited marks for safe pathfinding [OK]
Common Mistakes:
Using greedy without backtracking
Ignoring visited cells causing loops
Moving in wrong directions
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.