Backtracking

In computer science, backtracking is a recursive approach for finding solutions to some computational problems. Backtracking gradually finds candidate solutions and abandons candidates, i.e., "backtracks" when a candidate cannot be a good solution.
Pseudocode.
To apply backtracking to a problem, one must give the data "P" for an instance of the problem that is to be solved, and six procedures, "root", "abandon", "accept", "first", "next", and "save". These procedures should take the instance data "P" as a variable and should do the following:
The backtracking algorithm reduces the problem to the call "backtrack"("root"("P")), where "backtrack" is the following recursive procedure:
 procedure backtrack(c) is
 if abandon(P, c) then return
 if accept(P, c) then save(P, c)
 s ← first(P, c)
 while s ≠ NULL do
 backtrack(s)
 s ← next(P, s)