Professional Documents
Culture Documents
21 Recursion and Backtracking
21 Recursion and Backtracking
Intermediate / Advanced
Programming
Recursion and Backtracking
Agenda
N Queens
+ Finding solutions
+ Backtracking
+ The N Queens solution
Intermediate/Advanced Programming 2
Recursion and Backtracking
1
3/5/09
Intermediate/Advanced Programming 3
Recursion and Backtracking
A board of size 5
Intermediate/Advanced Programming 4
Recursion and Backtracking
2
3/5/09
♕!
Intermediate/Advanced Programming 6
Recursion and Backtracking
3
3/5/09
♕!
Intermediate/Advanced Programming 7
Recursion and Backtracking
♕! ♕!
♕! ♕!
♕!
♕! ♕!
♕! ♕!
Intermediate/Advanced Programming 8
Recursion and Backtracking
4
3/5/09
Agenda
N Queens
Finding solutions
+ Backtracking
+ The N Queens solution
Intermediate/Advanced Programming 9
Recursion and Backtracking
Finding solutions
+ Start in the first row, we
have a choice of five
possible moves
+ Any of these five choices
could lead to a solution
+ To move forward, we
have to choose one and
then see if that can lead
to a solution
Intermediate/Advanced Programming 10
Recursion and Backtracking
5
3/5/09
Intermediate/Advanced Programming 11
Recursion and Backtracking
Intermediate/Advanced Programming 12
Recursion and Backtracking
6
3/5/09
Intermediate/Advanced Programming 13
Recursion and Backtracking
Intermediate/Advanced Programming 14
Recursion and Backtracking
7
3/5/09
Intermediate/Advanced Programming 15
Recursion and Backtracking
Intermediate/Advanced Programming 16
Recursion and Backtracking
8
3/5/09
Intermediate/Advanced Programming 17
Recursion and Backtracking
A solution
+ Using this process, we
have found a solution
♕!
+ How many more solutions ♕!
are possible?
♕!
♕!
♕!
Intermediate/Advanced Programming 18
Recursion and Backtracking
9
3/5/09
Agenda
N Queens
Finding solutions
Backtracking
+ The N Queens solution
Intermediate/Advanced Programming 19
Recursion and Backtracking
4 Queens
+ Consider the 4 Queens case
+ There are four possible first
moves
Intermediate/Advanced Programming 20
Recursion and Backtracking
10
3/5/09
Intermediate/Advanced Programming 21
Recursion and Backtracking
4 Queens row 2
+ Given this sized board and
these two queens, where
♕!
can a queen go for row 3? ♕!
Intermediate/Advanced Programming 22
Recursion and Backtracking
11
3/5/09
4 Queens row 3
+ There is no “safe” move in
this situation, so be have to
♕!
back up and try a different ♕!
choice
+ This “backing up” is known
as “backtracking”
+ So, let’s back up to the most
recent point where we had a
choice, the choice in row 2
Intermediate/Advanced Programming 23
Recursion and Backtracking
Intermediate/Advanced Programming 24
Recursion and Backtracking
12
3/5/09
Intermediate/Advanced Programming 25
Recursion and Backtracking
Intermediate/Advanced Programming 26
Recursion and Backtracking
13
3/5/09
Intermediate/Advanced Programming 27
Recursion and Backtracking
Another failure
+ There are no safe moves
here, so… we have to back
♕!
track again ♕!
♕!
Intermediate/Advanced Programming 28
Recursion and Backtracking
14
3/5/09
Intermediate/Advanced Programming 29
Recursion and Backtracking
Intermediate/Advanced Programming 30
Recursion and Backtracking
15
3/5/09
Intermediate/Advanced Programming 31
Recursion and Backtracking
Intermediate/Advanced Programming 32
Recursion and Backtracking
16
3/5/09
Intermediate/Advanced Programming 33
Recursion and Backtracking
4 Queens solution
+ A queen in the first row and
second column leads to a
♕!
solution ♕!
+ How many more solutions
are possible? ♕!
♕!
Intermediate/Advanced Programming 34
Recursion and Backtracking
17
3/5/09
Intermediate/Advanced Programming 35
Recursion and Backtracking
♕ ♕ ♕ ♕
♕ ♕ ♕ ♕
♕ ♕ ♕ ♕ 12 more
not shown
♕ ♕ ♕ ♕
♕ ♕ ♕ ♕ 60 more
♕ ♕ ♕ ♕
not shown
♕ ♕ ♕ ♕
♕ ♕ ♕ ♕ 252 more
♕ ♕ ♕ ♕
♕ ♕ ♕ ♕ not shown
Intermediate/Advanced Programming 36
Recursion and Backtracking
18
3/5/09
A solution strategy
+ Build a tree of all possible valid queen
placements
+ Traverse the whole tree
+ Whenever there is a board where the
number of queens is equal the number of
rows in the board, add that board to a
collection of solutions
Intermediate/Advanced Programming 37
Recursion and Backtracking
Intermediate/Advanced Programming 38
Recursion and Backtracking
19
3/5/09
♕ ♕ ♕ ♕
♕ ♕ ♕ ♕
♕ ♕ ♕ ♕
Intermediate/Advanced Programming 40
Recursion and Backtracking
20
3/5/09
addQueen
/**
* Method to add a Queen to the board
* @param b The Board
* @param rowNum The starting row number to try to add the queen
*
* @return The board after placing the Queen, if possible else null
*/
public Board addQueen(Board b, int rowNum) {
// base case: number of Queens on the board is equal to the board size
if(b.numQueens() == b.getSize())
return b;
// try to place the queen in the board at column x within row, rowNum
if(tempBoard.place(new Board.Position(rowNum, x))){
// If it was added successfully
// recursively try adding a queen into the next row
Board nextBoard = addQueen(tempBoard, rowNum+1);
Intermediate/Advanced Programming 41
Recursion and Backtracking
getAllSolutions
/**
* Method to get all possible solutions to the Queens problem
*
* @param b The board to place the Queens at
* @param c All possible boards
* @param rowNum The initial row number to start placing queens
*/
public void getAllSolutions(Board b, Collection<Board> c, int rowNum){
Intermediate/Advanced Programming 42
Recursion and Backtracking
21
3/5/09
Intermediate/Advanced Programming 43
Recursion and Backtracking
private int n;
Intermediate/Advanced Programming 44
Recursion and Backtracking
22
3/5/09
n = size;
numQueens = 0;
board = new BoardState[n][n];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
board[i][j] = BoardState.UNTHREATENED;
}
public Board(Board b) {
board = new BoardState[b.n][b.n];
Intermediate/Advanced Programming 45
Recursion and Backtracking
/**
* accessor for the number of queens currently placed on the board
*/
public int numQueens() {
return numQueens;
}
/**
* returns true if the maximum number of queens have been placed.
*/
public boolean done() {
if (n < 1 || n == 2 || n == 3)
return (numQueens == 0);
return (numQueens == n);
}
Intermediate/Advanced Programming 46
Recursion and Backtracking
23
3/5/09
place
/**
* Places a queen on the board at Position P if that is an empty
* unthreatened place
*
* @param p
* the position to place the queen in
*
* @return true if placement is sucsessful
*/
public boolean place(Position p) {
if (board[p.x][p.y] != BoardState.UNTHREATENED)
return false;
board[p.x][p.y] = BoardState.QUEEN;
numQueens++;
return true;
}
Intermediate/Advanced Programming 47
Recursion and Backtracking
Agenda
N Queens
Finding solutions
Backtracking
The N Queens solution
Intermediate/Advanced Programming 48
Recursion and Backtracking
24
3/5/09
A sample solution
+ Download the NQueens archive from the
blackboard and get it to work
+ A solution written by Hatem Alismail
+ Study the solution and be able to answer
some questions about this code
Intermediate/Advanced Programming 49
Recursion and Backtracking
Intermediate / Advanced
Programming
Recursion and Backtracking
25