📖 Scenario: Imagine you are helping a robot find how many different ways it can move from the top-left corner to the bottom-right corner of a grid. The robot can only move right or down.
🎯 Goal: Build a program that calculates the number of unique paths in a grid using dynamic programming.
📋 What You'll Learn
Create a 2D array to represent the grid
Use a variable to store the number of rows and columns
Use nested loops to fill the DP table with the number of unique paths
Print the total number of unique paths from top-left to bottom-right
💡 Why This Matters
🌍 Real World
Robots and games often need to find paths through grids or maps. This program helps count possible routes.
💼 Career
Understanding dynamic programming and grid traversal is useful for software engineers working on algorithms, robotics, and game development.
Progress0 / 4 steps
1
Create the grid size variables
Create two integer variables called rows and cols and set rows = 3 and cols = 3.
DSA C
Hint
Use int to declare the variables and assign the values 3 to both.
2
Create the DP table
Create a 2D integer array called dp with size rows by cols.
DSA C
Hint
Declare dp as a 2D array with fixed size 3 by 3.
3
Fill the DP table with unique paths
Use nested for loops with variables i and j to fill dp. Set dp[i][0] = 1 for all rows and dp[0][j] = 1 for all columns. For other cells, set dp[i][j] = dp[i-1][j] + dp[i][j-1].
DSA C
Hint
Initialize the first row and first column with 1, then fill the rest by adding the top and left cells.
4
Print the total unique paths
Print the value of dp[rows-1][cols-1] using printf.
DSA C
Hint
Use printf("%d\n", dp[rows-1][cols-1]); to print the result.
Practice
(1/5)
1. What does the problem "Unique Paths in Grid DP" ask you to find?
easy
A. The maximum sum path from the top-left to the bottom-right corner of a grid.
B. The shortest path length from the top-left to the bottom-right corner of a grid.
C. The number of obstacles in the grid.
D. The number of different ways to move from the top-left to the bottom-right corner of a grid using only right and down moves.
Solution
Step 1: Understand the problem goal
The problem asks for counting all possible paths from the start (top-left) to the end (bottom-right) moving only right or down.
Step 2: Clarify movement constraints
Only moves allowed are right or down, no diagonal or backward moves.
Final Answer:
The number of different ways to move from the top-left to the bottom-right corner of a grid using only right and down moves. -> Option D
Quick Check:
Unique paths = count of right/down moves combinations [OK]
Hint: Count paths by moving only right or down [OK]
Common Mistakes:
Thinking diagonal moves are allowed
Confusing path count with shortest path
Counting obstacles instead of paths
2. Which of the following is the correct way to initialize the DP array for a grid of size m x n in C?
easy
A. int dp[m][n] = {0};
B. int dp[m][n]; dp = 0;
C. int dp[m][n]; memset(dp, 0, sizeof(dp));
D. int dp[m][n] = NULL;
Solution
Step 1: Understand array initialization in C
Arrays cannot be assigned directly after declaration; memset is used to set all bytes to zero.
Step 2: Check each option
int dp[m][n] = {0}; tries to initialize with {0} which works only for static arrays, not variable length arrays. int dp[m][n]; memset(dp, 0, sizeof(dp)); uses memset correctly. int dp[m][n]; dp = 0; tries invalid assignment. int dp[m][n] = NULL; assigns NULL which is invalid for arrays.
Final Answer:
int dp[m][n]; memset(dp, 0, sizeof(dp)); -> Option C
Quick Check:
Use memset to zero initialize arrays in C [OK]
Hint: Use memset to zero initialize arrays in C [OK]
Common Mistakes:
Trying to assign 0 directly to array
Using NULL for arrays
Assuming {0} works for variable length arrays
3. What is the output of the following code snippet for m=3, n=3?
int uniquePaths(int m, int n) {
int dp[m][n];
memset(dp, 0, sizeof(dp));
for (int i = 0; i < m; i++) dp[i][0] = 1;
for (int j = 0; j < n; j++) dp[0][j] = 1;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
printf("%d", uniquePaths(3, 3));
medium
A. 3
B. 6
C. 9
D. 1
Solution
Step 1: Initialize first row and column
First row and column are set to 1 because only one way to reach cells in first row (all right moves) or first column (all down moves).
Step 2: Fill dp table using sum of top and left cells
For each cell dp[i][j], value = dp[i-1][j] + dp[i][j-1]. For 3x3 grid, dp[2][2] = 6.
Final Answer:
6 -> Option B
Quick Check:
Unique paths in 3x3 grid = 6 [OK]
Hint: Sum paths from top and left cells to fill DP [OK]
Common Mistakes:
Not initializing first row and column to 1
Adding instead of summing dp[i-1][j] and dp[i][j-1]
Returning wrong dp cell
4. Find the error in this code snippet for unique paths calculation:
int uniquePaths(int m, int n) {
int dp[m][n];
memset(dp, 0, sizeof(dp));
for (int i = 0; i <= m; i++) dp[i][0] = 1;
for (int j = 0; j <= n; j++) dp[0][j] = 1;
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
medium
A. The loops initializing dp go out of bounds causing runtime error.
B. The dp array is not zero initialized.
C. The return statement returns wrong cell.
D. The nested loops start from 0 instead of 1.
Solution
Step 1: Check loop bounds for initialization
Loops use <= m and <= n which causes index to go out of bounds since valid indices are 0 to m-1 and 0 to n-1.
Step 2: Identify correct loop bounds
Loops should use < m and < n to avoid accessing invalid indices.
Final Answer:
The loops initializing dp go out of bounds causing runtime error. -> Option A
Quick Check:
Array indices must be within 0 to size-1 [OK]
Hint: Use < not <= for array indices in loops [OK]
Common Mistakes:
Using <= instead of < in loops
Ignoring array bounds causing crashes
Incorrect initialization of dp array
5. Given a 4x4 grid with some blocked cells (obstacles) represented by 1, how would you modify the unique paths DP solution to count paths avoiding obstacles?
Grid:
0 0 0 0
0 1 0 0
0 0 1 0
0 0 0 0
hard
A. Set dp[i][j] = 0 if cell is blocked; else dp[i][j] = dp[i-1][j] + dp[i][j-1].
B. Ignore obstacles and calculate paths normally.
C. Set dp[i][j] = 1 for blocked cells and 0 otherwise.
D. Only count paths that move diagonally to avoid obstacles.
Solution
Step 1: Mark blocked cells in dp as zero
If a cell is blocked (value 1), no paths can go through it, so dp[i][j] = 0.
Step 2: Calculate dp for free cells
For free cells (value 0), dp[i][j] = dp[i-1][j] + dp[i][j-1], summing paths from top and left.
Final Answer:
Set dp[i][j] = 0 if cell is blocked; else dp[i][j] = dp[i-1][j] + dp[i][j-1]. -> Option A
Quick Check:
Blocked cells have zero paths [OK]
Hint: Zero dp for obstacles, sum paths for free cells [OK]
Common Mistakes:
Ignoring obstacles in path count
Assigning 1 to blocked cells
Using diagonal moves to avoid obstacles
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.