Backtracking tries all possible options step-by-step and goes back (undoes) when a choice leads to a dead end, ensuring all solutions are explored.
Click to reveal answer
beginner
Why can't greedy algorithms solve all problems?
Greedy algorithms make the best local choice at each step but may miss the best overall solution because they don't reconsider past choices.
Click to reveal answer
intermediate
Give an example problem where greedy fails but backtracking works.
The "Subset Sum" problem: greedy might pick large numbers first and miss a valid subset, but backtracking tries all combinations to find the correct subset.
Click to reveal answer
intermediate
How does backtracking handle constraints in problems?
Backtracking checks constraints at each step and stops exploring a path as soon as a constraint is violated, saving time by pruning wrong paths early.
Click to reveal answer
intermediate
What is a key difference between backtracking and brute force?
Backtracking intelligently stops exploring paths that can't lead to a solution (pruning), while brute force tries all possibilities without early stopping.
Click to reveal answer
Which approach tries all possible solutions but stops early when constraints fail?
AGreedy
BBacktracking
CDynamic Programming
DDivide and Conquer
✗ Incorrect
Backtracking explores all options but prunes paths that violate constraints early.
Why might a greedy algorithm fail to find the best solution?
AIt tries all possible solutions
BIt always backtracks
CIt uses recursion
DIt only looks at the current best choice, ignoring future consequences
✗ Incorrect
Greedy algorithms pick the best immediate option without considering the whole problem.
Which problem is a classic example where greedy fails but backtracking succeeds?
ASubset Sum
BSorting numbers
CFinding maximum
DBinary search
✗ Incorrect
Subset Sum requires checking combinations; greedy can miss valid subsets.
What does backtracking do when it hits a dead end?
AGoes back to try a different choice
BStops completely
CChooses the first option again
DSwitches to greedy
✗ Incorrect
Backtracking undoes the last choice to explore other options.
Which is NOT a feature of backtracking?
APruning invalid paths early
BUndoing choices when needed
CTrying all possible solutions blindly
DUsing recursion
✗ Incorrect
Backtracking prunes paths; brute force tries all blindly.
Explain why greedy algorithms cannot solve all problems and how backtracking helps in those cases.
Think about how greedy looks only at the present step, while backtracking explores many possibilities.
You got /4 concepts.
Describe how backtracking works step-by-step using a simple example like choosing numbers to reach a target sum.
Imagine trying to pick numbers one by one and going back when you can't reach the target.
You got /5 concepts.
Practice
(1/5)
1. Why is backtracking preferred over greedy algorithms in problems like the N-Queens puzzle?
easy
A. Because backtracking explores all possible solutions and can backtrack when stuck
B. Because greedy algorithms always find the best solution quickly
C. Because backtracking uses less memory than greedy algorithms
D. Because greedy algorithms do not use recursion
Solution
Step 1: Understand problem requirements
The N-Queens puzzle requires placing queens so none attack each other, needing exploration of many possibilities.
Step 2: Compare algorithm approaches
Backtracking tries all options and can undo choices if they lead to conflicts, while greedy picks immediate best without reconsidering.
Final Answer:
Because backtracking explores all possible solutions and can backtrack when stuck -> Option A
Quick Check:
Backtracking explores all possible solutions and can backtrack when stuck = C [OK]
Hint: Backtracking tries all paths; greedy picks immediate best [OK]
Common Mistakes:
Thinking greedy always finds the best solution
Confusing backtracking with greedy memory use
Assuming greedy uses recursion like backtracking
2. Which of the following is the correct syntax to start a backtracking function in Java for solving a problem recursively?
easy
A. function backtrack(step) { ... }
B. void backtrack() = { ... }
C. public backtrack(int step) { ... }
D. public void backtrack(int step, List<Integer> path) { ... }
Solution
Step 1: Identify valid Java method syntax
Java methods require return type, method name, parameters in parentheses, and braces for body.
Step 2: Check each option
public void backtrack(int step, List<Integer> path) { ... } uses correct Java syntax with return type void, method name, parameters, and braces.
Final Answer:
public void backtrack(int step, List<Integer> path) { ... } -> Option D
Quick Check:
Java method syntax = A [OK]
Hint: Java methods need return type and parentheses [OK]
Common Mistakes:
Using '=' instead of braces for method body
Omitting return type in method declaration
Using JavaScript syntax in Java code
3. What will be the output of the following Java code snippet that uses backtracking to print all subsets of {1, 2}?
public class Subsets {
public static void backtrack(int[] nums, int start, List<Integer> temp, List res) {
res.add(new ArrayList<>(temp));
for (int i = start; i < nums.length; i++) {
temp.add(nums[i]);
backtrack(nums, i + 1, temp, res);
temp.remove(temp.size() - 1);
}
}
public static void main(String[] args) {
int[] nums = {1, 2};
List res = new ArrayList<>();
backtrack(nums, 0, new ArrayList<>(), res);
System.out.println(res);
}
}
medium
A. [[], [1], [1, 2], [2]]
B. [[1], [2], [1, 2]]
C. [[], [2], [1]]
D. [[1, 2]]
Solution
Step 1: Understand backtracking for subsets
The method adds current subset, then tries adding each next element recursively, then removes it to backtrack.
Step 2: Trace output for nums = {1, 2}
Subsets generated: [] (empty), [1], [1, 2], and [2].
Final Answer:
[[], [1], [1, 2], [2]] -> Option A
Quick Check:
All subsets of {1,2} = B [OK]
Hint: Backtracking lists all subsets including empty [OK]
Common Mistakes:
Missing empty subset in output
Not including subsets in correct order
Confusing subsets with permutations
4. The following backtracking code is intended to find all permutations of {1, 2}, but it has a bug. What is the bug?
public static void backtrack(List<Integer> nums, List<Integer> temp, List res) {
if (temp.size() == nums.size()) {
res.add(new ArrayList<>(temp));
return;
}
for (int i = 0; i < nums.size(); i++) {
temp.add(nums.get(i));
backtrack(nums, temp, res);
temp.remove(temp.size() - 1);
}
}
medium
A. It does not call backtrack recursively
B. It uses wrong base case size comparison
C. It does not check if element is already in temp, causing duplicates
D. It removes elements before adding them
Solution
Step 1: Analyze recursion and element addition
The code adds elements without checking if they are already in temp, so duplicates appear in permutations.
Step 2: Identify missing condition
Backtracking for permutations must skip elements already used in temp to avoid repeated elements.
Final Answer:
It does not check if element is already in temp, causing duplicates -> Option C
Quick Check:
Missing used-element check = D [OK]
Hint: Check if element already used before adding [OK]
Common Mistakes:
Ignoring duplicate elements in permutations
Confusing base case with wrong size
Thinking recursion is missing
5. Given the problem of selecting a subset of items with weights and values to maximize value without exceeding a weight limit, why can't a greedy algorithm always solve this correctly, and how does backtracking help?
hard
A. Greedy always finds best solution quickly; backtracking is slower but simpler
B. Greedy picks locally best items but may miss best total; backtracking tries all combinations
C. Greedy uses recursion; backtracking uses loops only
D. Greedy requires sorting; backtracking does not
Solution
Step 1: Understand greedy approach limitation
Greedy picks items with best value/weight ratio first, but this may miss combinations with better total value.
Step 2: Explain backtracking advantage
Backtracking tries all subsets, ensuring the best total value is found by exploring all possibilities.
Final Answer:
Greedy picks locally best items but may miss best total; backtracking tries all combinations -> Option B
Quick Check:
Greedy local vs backtracking global = A [OK]
Hint: Greedy misses global best; backtracking tries all [OK]
Common Mistakes:
Assuming greedy always finds best solution
Confusing recursion with iteration
Thinking sorting solves all problems
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.