|
|
Project 2 - The search for a-MAZE-ing donuts!Phase AImportant Deadlines
Outline
I. IntroductionIt is an incredibly serendipitous day for you at the Paul Allen Center. A mysterious benefactor has appeared during the night and has left behind donuts for the entire CSE 326 class! You've managed to get out of bed at a yawningly-early 10 AM, meaning you have first dibs on all the yummy goodness of fresh-baked donuts if you can get to them in time (and the always hungry grad students from the night before haven't beat you there). Unfortunately, the Allen Center space czars just happened to have decided to rearrange all the furniture during the night (as part of their experimentation with different settings in the new building), turning the entire building into one complex and mystifying maze. You haven't had your morning coffee yet, and you just don't feel like running around looking for donuts-- but you're so hungry! Why not let your computer solve the maze and find the donuts FOR you? II. Learning ObjectivesIn this assignment, you will:
III. Assignment and Algorithm OverviewFor the complete assignment, you will be using the data structures created in Phase A to write several maze-solving MazeRunner classes in Phase B. Specifically, you will later be using the data structures you create here to implement the tree-traversal algorithms of Depth-First Search (DFS), Breadth-First Searth (BFS), and Best-First Search (not abbreviated for obvious reasons!). For Phase A, you should focus on implementing well designed, general data structures that will work as you intend for Phase B. IIIa. Phase A: Stacks, Queues, and PriorityQueuesDescriptionIn Phase A of this assignment, you will be writing code that implements a given (new) interface for a stack, queue, and priority queue (2 implementations). You should test these implementations to be sure they are correct before proceeding to Phase B (which will be posted in the near future). Code RequirementsYour task for Phase A is to:
README.TXT QuestionsSurprise! There are no readme questions for Phase A. Don’t worry - the README file will return for Phase B. IIIb. Phase B: Running the Maze (more later)Phase B will involve implementing the above tree-traversal algorithms (they will be implemented as MazeRunner classes), understanding operations on a maze as a graph, and analyzing and extending the maze code which we will provide. IV. Logistics: TeamsYou are encouraged (although not required) to work with a partner of your own choosing for this project. You may choose how to divide the work between the two of you under three conditions: 1. You must document each team member's effort in the README file (record this now so you have the info for the phase B readme file); 2. Work together so that you both understand your answers to the questions answered in the README (for Phase B); 3. Understand (at least) at a high level how your team member's code is structured and how it works (code for both Phases A & B). If working with a partner, you must find your partner and send a single email to the instructor with the name AND UW email id of both partners by the deadline given at the top of this document. If you are planning on working alone, you should also email the instructor a message stating “I am working alone”. Please use this link for either message. Remember to test your team's code as a whole to make sure that your portions work together properly! Also, be aware that except in extreme cases and provided you notify us in advance of the deadline, all team members will receive the same grade for the project. If you would like to use a shared group directory, please contact one of the TA's for instructions. This is NOT necessary, just optional if it is your preference. V. Phase A Provided CodeTo facilitate understanding of this rather complex project, and to encourage good modular decomposition and "unit testing" (testing small pieces of code instead of testing the entire program all at once), this project is broken into two Phases. For Phase A, we suggest improving and testing your basic "helper" data structures (i.e. Stack, Queue, BinaryHeap, DHeap) without worrying about the Maze-related code. For this first Phase, we are providing the interface for a Stack, a Queue, and a PriorityQueue. You must write an implementation of the Stack and Queue interface as described above. In addition, you must write two implementations of the PriorityQueue interface – a BinaryHeap and a DHeap. (For the D-Heap, we suggest first writing the Binary Heap. You will note that a correctly implemented D-Heap can also be used as BinaryHeap, but we suggest leaving your Binary Heap with its efficient multiply and divide implementations, and using it as a jumping off point for your D-heap code.) Java code: Right-click on the links below to download the starter code.
Your priority queue implementations must accept Comparable objects. Many classes such as String and Integer implement the Comparable interface. In Phase B you will need to modify/create some more classes that implement the Comparable interface (in other words, writing your own compareTo method). Then you will be able to have priority queues containing those objects. Unlike your stacks implementations for Project1 that were hardcoded to use doubles, your implementations of the Stack, Queue, and PriorityQueue interface need to use generics. Your implementations of BinaryHeaps and DHeaps in particular need to use compareTo when comparing elements so the code will work on any Comparable object. More information about Java's Comparable interface may be found at Sun's website. In addition, you might find this description from fall 2006's cse143 to be useful. Both generics and the Comparable interface are discussed in section 1.5 of the Weiss text. For Phase B of this project, we will be providing additional code which will read, parse, and build a Maze class object from a text file. We will also give a simple MazeRunner class from which you can inherit your own MazeRunners. VI. Phase A TurninPhases A and B will be graded together when your entire assignment is turned in with Phase B. However, 15% of your grade will be based upon the "in-progress" checkin for Phase A. Although 15% is a small fraction, you are highly encouraged to successfully complete all of Phase A by this deadline, as there is much more work to do in Phase B. We will be testing the code that you submit for the in-progress checkin - so we will expect that you have done the same! Only one person from each team should submit. The same person should submit both Phases A and B. You should submit:
Use the Assignment Dropbox to submit your code. |