Backtracking search is simply depth-first search. At each iteration, we choose a variable to try and we choose an ordering of that variable's domain.
//This takes in an assignment (either partial or complete) BACKTRACKING(assignment) if assignment is complete return assignment end X ← choose an unassigned variable D ← choose an ordering of the values in the domain of X for each d in D Augment assignment with (X=d) //Assignment has now been updated [OPTIONAL: ADD INFERENCE HERE] if assignment is consistent // How consistency is detected changes if inference is added result ← BACKTRACKING(assignment) //We found a solution! if result != FAILURE return result end //This value didn't work...move on to the next remove (X=d) from assignment end end //None of the values in the domain worked...we've hit a dead end return FAILURE end