📖 Scenario: Imagine a little rat trying to find its way through a maze to reach the cheese. The maze is a grid where some paths are open and some are blocked. The rat can only move right or down. Your job is to help the rat find a path from the start to the end.
🎯 Goal: You will build a program that represents the maze as a grid, sets up a starting point, finds a path through the maze using simple rules, and then shows the path the rat can take.
📋 What You'll Learn
Create a 4x4 maze grid using a list of lists with exact values
Add a variable to store the size of the maze
Write a function to find a path from the top-left to bottom-right of the maze
Print the path grid showing the route the rat can take
💡 Why This Matters
🌍 Real World
Maze solving algorithms are used in robotics for path planning and navigation in unknown environments.
💼 Career
Understanding recursive backtracking helps in solving complex problems like puzzles, games, and AI pathfinding.
Progress0 / 4 steps
1
Create the maze grid
Create a variable called maze that is a 4x4 list of lists with these exact values: [[1, 0, 0, 0], [1, 1, 0, 1], [0, 1, 0, 0], [1, 1, 1, 1]]
DSA Python
Hint
Use a list of lists to represent rows and columns. Each inner list is a row.
2
Set the maze size
Create a variable called n and set it to the length of maze
DSA Python
Hint
Use the len() function to find how many rows are in the maze.
3
Write the function to find the path
Write a function called solve_maze that takes maze and n as inputs and returns a 2D list path showing the route. Use a helper function solve inside it that uses recursion to move right or down if the cell is open (value 1). Mark the path cells with 1 and others with 0.
DSA Python
Hint
Use recursion to try moving down and right. Mark the path with 1s in a separate grid.
4
Print the path found
Call solve_maze(maze, n) and store the result in path. Then print each row of path on a new line with spaces between numbers.
DSA Python
Hint
Print each row of the path list with spaces between numbers to show the route.
Practice
(1/5)
1. What is the main goal of the Rat in a Maze problem?
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 maze
D. Fill the maze with obstacles
Solution
Step 1: Understand the problem objective
The Rat in a Maze problem asks to find a path from the start cell (usually top-left) to the destination cell (usually bottom-right) in a maze represented by a grid.
Step 2: Identify the correct goal
The goal is to find a valid path through open cells, avoiding obstacles, not just counting walls or distances.
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 measuring [OK]
Common Mistakes:
Confusing pathfinding with counting obstacles
Thinking the problem is about shortest path always
Assuming the maze is always square
2. Which of the following is the correct way to check if the rat can move to cell (x, y) in Python?
easy
A. if x >= 0 and y >= 0 and maze[x][y] == 1:
B. if maze[x][y] == 1 and x >= 0 and y >= 0:
C. if maze[x][y] == 1 or x >= 0 or y >= 0:
D. if maze[x][y] != 1 and x > 0 and y > 0:
Solution
Step 1: Check boundary conditions first
We must first ensure x and y are within valid indices (>= 0) before accessing maze[x][y] to avoid errors.
Step 2: Check if the cell is open (value 1)
After confirming indices, check if maze[x][y] == 1 to confirm the cell is open for movement.
Final Answer:
if x >= 0 and y >= 0 and maze[x][y] == 1: -> Option A
Quick Check:
Check bounds before access [OK]
Hint: Check indices before accessing maze to avoid errors [OK]
Common Mistakes:
Checking maze[x][y] before verifying indices
Using 'or' instead of 'and' in conditions
Checking for maze[x][y] != 1 instead of == 1
3. What will be the output of the following code snippet for the given maze?
maze = [
[1, 0, 0, 0],
[1, 1, 0, 1],
[0, 1, 0, 0],
[1, 1, 1, 1]
]
solution = [[0]*4 for _ in range(4)]
def solve_maze(x, y):
if x == 3 and y == 3:
solution[x][y] = 1
return True
if 0 <= x < 4 and 0 <= y < 4 and maze[x][y] == 1:
solution[x][y] = 1
if solve_maze(x + 1, y):
return True
if solve_maze(x, y + 1):
return True
solution[x][y] = 0
return False
return False
solve_maze(0, 0)
print(solution)
Hint: Follow recursion path and mark visited cells [OK]
Common Mistakes:
Confusing backtracking reset steps
Assuming right move tried before down
Not marking the destination cell
4. Identify the error in the following code snippet for solving the Rat in a Maze problem:
def solve_maze(x, y):
if x == len(maze) - 1 and y == len(maze[0]) - 1:
solution[x][y] = 1
return True
if x >= 0 and y >= 0 and maze[x][y] == 1:
solution[x][y] = 1
if solve_maze(x + 1, y):
return True
if solve_maze(x, y + 1):
return True
solution[x][y] = 0
return False
return False
medium
A. The function does not backtrack properly
B. The boundary check misses upper limits for x and y
C. The base case does not mark the destination cell
D. The maze is not checked for obstacles
Solution
Step 1: Analyze boundary checks in the condition
The condition 'if x >= 0 and y >= 0 and maze[x][y] == 1' misses checking if x and y are less than maze size, risking index errors.
Step 2: Confirm base case and backtracking correctness
The base case marks destination cell and returns True. Backtracking resets solution[x][y] to 0 correctly. Maze obstacles are checked.
Final Answer:
The boundary check misses upper limits for x and y -> Option B
Quick Check:
Check both lower and upper bounds [OK]
Hint: Always check both lower and upper bounds for indices [OK]
Common Mistakes:
Forgetting to check upper bounds causes errors
Assuming base case is wrong when it is correct
Ignoring backtracking step
5. Given a maze represented by a 2D list where 1 means open path and 0 means blocked, how would you modify the standard Rat in a Maze backtracking algorithm to find all possible paths from start to destination instead of just one?
hard
A. Return True immediately after finding the first path
B. Use a queue instead of recursion to find paths
C. Stop recursion when a path is found
D. Store each valid path in a list and continue searching after backtracking
Solution
Step 1: Understand standard algorithm behavior
The standard algorithm returns True immediately after finding the first path, stopping further search.
Step 2: Modify to find all paths
Instead of returning True immediately, store the current path in a list and continue exploring other paths by backtracking to find all possible routes.
Final Answer:
Store each valid path in a list and continue searching after backtracking -> Option D
Quick Check:
Collect all paths by continuing search [OK]
Hint: Collect paths and backtrack fully to find all [OK]
Common Mistakes:
Stopping after first path found
Not storing paths properly
Confusing BFS queue with backtracking recursion
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.