Learning Goals

  • Implement nontrivial algorithms involving multiple ADTs and data structures.

    Previous assignments involved developing data structures to fulfill the ADTs from lecture. In contrast, this assignment revolves around working as a client of those ADTs to implement complex algorithms.

  • Extending an existing codebase.

    Also unlike previous assignments, this assignment focuses on a particular, runnable program—one with unfamiliar code that you’ll be seeing for the first time. This is very realistic experience, since in the real world, we usually don’t start developing projects completely from scratch. As a result, you should expect to spend a decent amount of time familiarizing yourself with the provided code so that you know how to interface with it and what your code needs to do.

Getting the Assignment


Pull the skeleton repository in IntelliJ to get the mazes assignment.

Like previous projects, if IntelliJ doesn’t react to the new folder for whatever reason, refresh Gradle manually through the Gradle tool window (on the right by default):

Gradle Refresh

Extra Credit Introductory Quiz

This assignment is fairly lengthy; to encourage you to start early, we’re offering an optional quiz about the contents of the instructions and the provided code. Complete the assignment here on Gradescope by Wednesday, May 19, 11:59pm PDT for extra credit.

Note that this is an individual assignment: even if you are working in a group, each member must submit individually.


  1. Dijkstra's Algorithm - Familiarize yourself with the main application, and implement maze solving.
  2. Kruskal's Algorithm - Implement maze generation.