A CSP backtracker never removes a failed assignment, corrupting later branches.
Codejavascript
function backtrack(assignment) {
if (isComplete(assignment)) return assignment;
const v = selectUnassigned(assignment);
for (const val of domain(v)) {
if (isConsistent(v, val, assignment)) {
assignment[v] = val;
const result = backtrack(assignment);
if (result) return result;
}
}
return null;
}
The search reports failure even for solvable problems. What is the bug?