The number of problems that can be solved with backtracking is very large
Backtracking is a is general purpose problem solving technique
General structure of a Solution using Backtracking
public ... backtrackSolve("problem N") { if ( "problem N" is a solved problem ) { print "(solved) problem N"; // It's a solution ! return; } for ( each possible step S you can make in "problem N" ) { if ( step S is a legal move ) { Make step S (this changes "problem N" !); backtrackSolve("problem N-1"); Take step S back (this restores "problem N" !); } } } |
The Maze solver fits into this form:
public class Maze { private int grid[][] = {{4,1,1}, {1,0,1}, {1,0,1}}; // ************************************************* // Solve a maze problem represented by "grid[][]" // starting at position (row,col) in the grid // ************************************************* public void solve(int row, int col) { if ( row == 2 && col == 2) { --> We reached the exit ! --> print solution; return; } // ***************************************** // Try all possible (but legal) steps: // ***************************************** for ( S in North, South, east, West ) { if ( OK to explore step S ) { Take step S; solve(new-row, new-col); // Problem N-1 Take step S back; } } } } |