57 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Backtracking Algorithms
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Backtracking Algorithms
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Backtracking is a general algorithm for finding all (or some) solutions to some computational problems, notably constraint satisfaction problems, that incrementally builds candidates to the solutions, and abandons each partial candidate *("backtracks")* as soon as it determines that the candidate cannot possibly be completed to a valid solution.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Example Problem (The Knight’s tour problem)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   *The knight is placed on the first block of an empty board and, moving according to the rules of chess, must visit each square exactly once.*
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								 ### Path followed by Knight to cover all the cells
							 | 
						|||
| 
								 | 
							
								  Following is chessboard with 8 x 8 cells. Numbers in cells indicate move number of Knight.
							 | 
						|||
| 
								 | 
							
								  [](https://commons.wikimedia.org/wiki/File:Knights_tour_(Euler).png)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Naive Algorithm for Knight’s tour
							 | 
						|||
| 
								 | 
							
								The Naive Algorithm is to generate all tours one by one and check if the generated tour satisfies the constraints.
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								while there are untried tours
							 | 
						|||
| 
								 | 
							
								{ 
							 | 
						|||
| 
								 | 
							
								   generate the next tour 
							 | 
						|||
| 
								 | 
							
								   if this tour covers all squares 
							 | 
						|||
| 
								 | 
							
								   { 
							 | 
						|||
| 
								 | 
							
								      print this path;
							 | 
						|||
| 
								 | 
							
								   }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### Backtracking Algorithm for Knight’s tour
							 | 
						|||
| 
								 | 
							
								Following is the Backtracking algorithm for Knight’s tour problem.
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								If all squares are visited 
							 | 
						|||
| 
								 | 
							
								    print the solution
							 | 
						|||
| 
								 | 
							
								Else
							 | 
						|||
| 
								 | 
							
								   a) Add one of the next moves to solution vector and recursively 
							 | 
						|||
| 
								 | 
							
								   check if this move leads to a solution. (A Knight can make maximum 
							 | 
						|||
| 
								 | 
							
								   eight moves. We choose one of the 8 moves in this step).
							 | 
						|||
| 
								 | 
							
								   b) If the move chosen in the above step doesn't lead to a solution
							 | 
						|||
| 
								 | 
							
								   then remove this move from the solution vector and try other 
							 | 
						|||
| 
								 | 
							
								   alternative moves.
							 | 
						|||
| 
								 | 
							
								   c) If none of the alternatives work then return false (Returning false 
							 | 
						|||
| 
								 | 
							
								   will remove the previously added item in recursion and if false is 
							 | 
						|||
| 
								 | 
							
								   returned by the initial call of recursion then "no solution exists" )
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### More Information
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								[Wikipedia](https://en.wikipedia.org/wiki/Backtracking)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								[Geeks 4 Geeks](http://www.geeksforgeeks.org/backtracking-set-1-the-knights-tour-problem/)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								[A very interesting introduction to backtracking](https://www.hackerearth.com/practice/basic-programming/recursion/recursion-and-backtracking/tutorial/)
							 |