90 likes | 197 Views
Please snarf the code for today’s class. Then think about the famous 8-Queen’s Puzzle. The question is: is there a way to arrange 8 queens on a (8x8) chessboard so that no 2 queens can attack each other (queens can attack horizontally, vertically, and diagonally).
E N D
Please snarf the code for today’s class. Then think about the famous 8-Queen’s Puzzle. The question is: is there a way to arrange 8 queens on a (8x8) chessboard so that no 2 queens can attack each other (queens can attack horizontally, vertically, and diagonally) The above board is 2 Queens short of a solution. Find the solution!
So how could we solve this problem computationally? • I could solve this problem with a couple of carefully constructed loops • I think recursion is needed to solve this problem • I think stacks and queues are needed to solve this problem • I think some new secret technique is needed that I’m guessing will be revealed today
The Basic Recursive Backtracking Solution • I start at a particular state, where I have to make a decision from a list of options • For each option: • Try deciding on that option • UPDATE THE STATE • Recursively call myself to try all subsequent paths from that point • If I find a solution…do something (maybe return, maybe increment a counter) • UNDO the state change I just made • At this point I’ve done everything I can do in this state
Recursive Backtracking • You will be able to describe the basic approach of recursive backtracking • We will look at a very simple recursive backtracking problem. • You will solve a slightly more complicated recursive backtracking problem • We will go over a solution to the n-queens problem, and you’ll edit the solution
Go to codingBat.com/java/Recursion-2 • Solve groupNoAdj • If you finish that one, try and solve splitArray (this can be solved using a simple for loop and groupSum or by using a separate helper function) • Put the code into a file in the code you snarfed for today – you’ll submit that directory via ambient
Modify the code of 8-Queens • First figure out how to modify the code to solve the 8 Rooks problem (Rooks can only attack horizontally and vertically, not diagonally). Get your code working and then change it back to queens when you’re done. • Modify the code to count the number of solutions to the 8 Queens problem. There should be 92 solutions. • When you’re finished, submit the result via ambient
Recursive Backtracking • You will be able to describe the basic approach of recursive backtracking • We will look at a very simple recursive backtracking problem. • You will solve a slightly more complicated recursive backtracking problem • We will go over a solution to the n-queens problem, and you’ll edit the solution