CS100-RecursiveBacktracking2.pptx

advertisement
As you arrive snarf the code for today’s class. Then go ahead
and run Blob.java. Play around with running File->new blobs
and File->count blobs.
Two Additional Variations
•
•
•
•
Recursion on grids
Recursion with 2 player games
GridGame apt
Maybe a brief visit back to stacks and queues
Blobs
• Modify Blobs.java to use BlobModel rather
than IterativeBlobModel
• Go into BlobModel and finish the blobFill
Function (bear in mind it must both modify
the board AND return the size of the final
blob)
2 Player Games
• Imagine a numbers game played with 2 players who takes
turns
– The game starts with a particular number
– Each turn, a player can subtract 1 2 or 3 from the number
– The player who reduces the number to 0 (or below) wins
• Consider the function willFirstPlayerWin(int startingNum)
which determines if the first player wins if both players play
perfectly
• How can we solve this problem recursively?
• HINT: willFirstPlayerWin(5) is true because
willFirstPlayerWin(4) is false. In more normal terms, if the
game starts at 5, player1 can reduce it to 4, and then
player2 can’t win from 4.
2 Player Games
• Imagine a numbers game played with 2 players who takes turns
– The game starts with a particular number
– Each turn, a player can subtract 1 2 or 3 from the number
– The player who reduces the number to 0 (or below) wins
•
•
•
•
player 1 wins if player 2 can’t win
So player 1 wants to move the number to something unwinnable
If player 1 can’t do that, player 2 will win
Example: for 4…player 1 can move it to 1 2 3 – any one of those player 2
can win from.
• So…
if i can win the game right now, then return true
for each number I can move the game to
if that number is unwinnable (recursion!)
return true
return false
GridGame
•
•
•
•
COMBINES grid work and 2 player recursive decdent
It’s available in the APT section of the website
My starting code is in the code you snarfed
There are HINTS below, but try to work with those
nearby and solve the problem without hints
• Not currently assigned, but I wouldn’t be surprised if it
showed up on a later APT set so be sure to keep your
code
• If you finish early, take a look at IterativeBlobModel
and try to understand how the non recursive blobFill
function works
Iterative Blob Model
• Look and work with those nearby to write an
English language description of how it works
• You’ll know you really understand it when:
– You know how you would change the algorithm to
make it work for diagonals (small change)
– You know if the algorithm would still work if you
used a stack instead of a queue
Which line would you need to change
to make diagonals work?
1.
2.
3.
4.
5.
Line 1
Line 2
Line 3
Line 4
Line 5
Download