📖 Scenario: You are building a simple word search puzzle solver. The puzzle is a grid of letters, and you want to find if a given word exists in the grid by moving horizontally or vertically to adjacent letters.This is like searching for a hidden word in a crossword puzzle.
🎯 Goal: Build a program that checks if a given word can be found in the letter grid by moving up, down, left, or right without revisiting the same cell.
📋 What You'll Learn
Create a 2D grid of characters with exact letters
Create a string variable for the word to search
Implement a backtracking function to search the word in the grid
Print true if the word is found, otherwise false
💡 Why This Matters
🌍 Real World
Word search puzzles and games often require searching for words hidden in grids. This technique helps in solving such puzzles automatically.
💼 Career
Backtracking is a common algorithmic technique used in many software engineering tasks like puzzle solving, constraint satisfaction problems, and pathfinding.
Progress0 / 4 steps
1
Create the letter grid
Create a 2D vector of characters called board with these exact rows: {'A', 'B', 'C', 'E'}, {'S', 'F', 'C', 'S'}, {'A', 'D', 'E', 'E'}
DSA C++
Hint
Use vector> board = {{...}, {...}, {...}}; with the exact letters.
2
Set the word to search
Create a string variable called word and set it to "ABCCED"
DSA C++
Hint
Use string word = "ABCCED"; to set the word.
3
Implement the backtracking search function
Write a function called bool exist(int row, int col, int index) that uses backtracking to check if the word can be found starting from board[row][col]. Use recursion to check neighbors up, down, left, and right. Mark visited cells by temporarily changing their value to '#' and restore after recursion. Return true if the full word is matched.
DSA C++
Hint
Use recursion to check neighbors and mark visited cells with '#' temporarily.
4
Search the word and print the result
Write code to check every cell in board as a starting point. Use the exist function to find if word exists. Print true if found, otherwise false.
DSA C++
Hint
Use nested loops to try every cell as a start. Print "true" if found, else "false".
Practice
(1/5)
1. What is the main purpose of backtracking in the Word Search in Grid problem?
easy
A. To explore all possible paths to find the word in the grid
B. To sort the grid alphabetically before searching
C. To count the number of words in the grid
D. To replace characters in the grid with special symbols
Solution
Step 1: Understand backtracking role
Backtracking tries all possible paths in the grid to find the word by moving in allowed directions and undoing moves if they don't lead to a solution.
Step 2: Eliminate other options
Sorting, counting words, or replacing characters are not related to backtracking's purpose in this problem.
Final Answer:
To explore all possible paths to find the word in the grid -> Option A
Quick Check:
Backtracking = Explore paths [OK]
Hint: Backtracking means trying all paths and undoing wrong steps [OK]
Common Mistakes:
Thinking backtracking sorts or modifies the grid
Confusing backtracking with simple searching
Ignoring the undo step in backtracking
2. Which of the following is the correct way to check if a cell (row, col) is inside the grid boundaries in C++?
easy
A. if (row == 0 && col == 0)
B. if (row > 0 && row <= rows && col > 0 && col <= cols)
C. if (row >= 0 && row < rows && col >= 0 && col < cols)
D. if (row >= 0 || row < rows || col >= 0 || col < cols)
Solution
Step 1: Understand grid indexing
Grid rows and columns start at 0, so valid indices are from 0 to rows-1 and 0 to cols-1.
Step 2: Check boundary condition
if (row >= 0 && row < rows && col >= 0 && col < cols) correctly checks if row and col are within these ranges using && (and) operator.
Final Answer:
if (row >= 0 && row < rows && col >= 0 && col < cols) -> Option C
Quick Check:
Boundary check = if (row >= 0 && row < rows && col >= 0 && col < cols) [OK]
Hint: Use >= 0 and < size with && to check boundaries [OK]
Common Mistakes:
Using > 0 instead of >= 0 excludes first row/column
Using || instead of && allows invalid indices
Checking only (0,0) cell
3. What will be the output of the following C++ code snippet for word search?
Starting at 'B' (0,1), next letter 'E' must be adjacent (up, down, left, right). Adjacent cells to 'B' are 'A'(0,0), 'C'(0,2), 'E'(1,1). 'E' is adjacent, so path B->E exists.
Step 3: Confirm backtracking finds the word
Backtracking will find "BE" successfully.
Final Answer:
Found -> Option A
Quick Check:
Word "BE" exists in grid = Found [OK]
Hint: Check adjacency of letters in grid for word presence [OK]
Common Mistakes:
Ignoring adjacency rules
Assuming diagonal moves allowed (usually not)
Confusing output with error
4. Identify the bug in this backtracking snippet for word search:
bool backtrack(int r, int c, int index) {
if (index == word.length()) return true;
if (r < 0 || r >= rows || c < 0 || c >= cols) return false;
if (grid[r][c] != word[index]) return false;
grid[r][c] = '#';
bool found = backtrack(r+1, c, index+1) || backtrack(r-1, c, index+1) || backtrack(r, c+1, index+1) || backtrack(r, c-1, index+1);
return found;
}
medium
A. Incorrect boundary checks
B. Wrong base case condition
C. Using '||' instead of '&&' in recursive calls
D. Missing restoring grid[r][c] after recursion
Solution
Step 1: Understand backtracking marking
The code marks visited cells by setting grid[r][c] = '#'.
Step 2: Check if grid is restored after recursion
After recursive calls, the original character should be restored to allow other paths. This code does not restore it.
Step 3: Identify the bug
Missing restoration causes wrong results or blocks other paths.
Final Answer:
Missing restoring grid[r][c] after recursion -> Option D
Quick Check:
Restore grid after recursion = Fix bug [OK]
Hint: Always undo changes after recursive calls in backtracking [OK]
Which of the following words can be found using backtracking moving only up, down, left, or right? Select the correct option.
hard
A. "CATS"
B. "TEA"
C. "FEST"
D. "BAT"
Solution
Step 1: Check "CATS"
"CATS" starts at (0,0) 'C', next 'A' at (0,1), next 'T' at (0,2), but no adjacent 'S' to 'T' at (0,2). Adjacent: 'A'(0,1), 'F'(0,3), 'E'(1,2). No path exists.
Step 2: Check "TEA"
"TEA" letters: T, E, A. Possible path: (2,1) 'T' -> (3,1) 'E' -> (2,2) 'A' ? From 'E'(3,1) to 'A'(2,2) is diagonal, invalid. Try other 'T's: (0,2) 'T' -> (1,2) 'E' down -> (2,2) 'A' down. Valid path.
Step 3: Check "FEST" and "BAT"
"FEST" letters not found in order with adjacency. "BAT" letters: B(1,0), A(2,2), T(0,2) no continuous path.
Final Answer:
"TEA" -> Option B
Quick Check:
Check adjacency for each word = "TEA" found [OK]
Hint: Trace letter adjacency step-by-step for each word [OK]
Common Mistakes:
Assuming diagonal moves allowed
Not checking letter order carefully
Ignoring multiple occurrences of letters
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.