Assignment 4. Recursive Backtracking


Due Friday, October 28 at 11:59 pm

  • Submissions received by the due date receive a small on-time bonus.
  • Late work after the due date is accepted if within the grace period (48 hours for this assignment).
  • The grace period gives you the ability to self-grant an extension; we trust you will make reasonable and sparing use of this power.
  • The grace period expires Sun, Oct 30 at 11:59 pm, after which we do not accept further late work.
  • All due dates and submission times are expressed in Pacific time.

Last week's assignment introduced you to the intriguing world of recursion and built your solid base of recursive fundamentals. This week we pivot towards applying the powerful nature of recursive backtracking to solve real-world problems. As is typical in recursive problem-solving, you'll likely spend the bulk of your time wrapping your head around the "thinking recursively" part, but once writing the actual code, you'll find that a concise algorithm is all that's needed to solve the task. That sparse elegance can sometimes seem incongruous with how hard you had to work for it. Start early to give yourself enough time to let these deep and powerful ideas percolate to full understanding. When you put the finishing touches on these problems, you will have earned your rightful place as a master in the way of recursive problem-solving.

This assignment is to be completed individually. Working in pairs/groups is not permitted.

Learning goals

After completing this assignment, you will be able to…

  • Appreciate the elegance and power of recursive problem-solving and identify problems that are well-suited to be solved recursively
  • Implement more advanced recursive algorithms to solve problems that cannot be easily solved using an iterative approach
  • Reflect thoughtfully on the ends to which you wil apply these techniques

Assignment parts

This assignment consists of a warmup exercise and three separate problems to solve using recursive backtracking.

  • Warmup

    Practice with testing and debugging recursive functions.

  • Text Predict

    Predict a user's intended word when typed on old-style phone keypad.

  • Scoring Boggle

    Find all words on a given Boggle board and tally the maximum possible score.

  • Computational Redistricting

    Determine if there is a fair geometric division of a state's population into equal-size electoral districts.

Getting started

We provide a ZIP of the starter project. Download the zip, extract the files, and open the .pro file in Qt Creator.

📦 Starter code

The source files you will edit are predict.cpp, boggle.cpp, and redistrict.cpp. Additionally, you will answer questions in short_answer.txt.

Resources

Here are some resources that you might find helpful for this assignment:

Getting help

Look for an announcement on the Ed forum for the YEAH session for this assignment. If you have questions for us, the Ed forum is open 24/7 for general discussion. Always start by searching first to see if your question has already been asked and answered before making a new post. To troubleshoot a problem with your specific code, your best bet is to bring it to the LaIR helper hours or office hours.

Submit

Before you call it done, run through our submit checklist to be sure all your ts are crossed and is dotted. Then upload your completed files to Paperless for grading.

Please submit only the files you edited; for this assignment, these files will be:

  • predict.cpp
  • boggle.cpp
  • redistrict.cpp
  • short_answer.txt

🏁 Submit to Paperless

Note: On Paperless, all due dates and submission times are expressed in Pacific time.