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

Feedback Survey

After completing both the programming and experiment portions of the assignment, complete the mandatory 1-point individual feedback survey on Canvas. Each partner needs to submit their own individual response. Responses will be graded on completion, but we’d appreciate if you took a few minutes to really reflect on your experience so that we can improve the assignment for future quarters.


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