The problem
Route planning across a rail network is a shortest-path problem on a weighted graph — and the point of the project was to solve it without reaching for a library. Building the data structures by hand is what makes the algorithm's cost model concrete: how a priority queue drives Dijkstra's frontier, and how hash-table load factor and collision handling determine whether adjacency lookups stay constant-time.
The approach
- Shortest paths with Dijkstra's algorithm. Routes are computed over a weighted graph of stations and connections, returning both the path and its total cost.
-
Data structures written from scratch. Both
DijkstraGraphandHashtableMapwere implemented from the ground up rather than pulled from the Java collections framework, then integrated behind the application layer. - JavaFX front end. A desktop interface sits on top of the graph backend, letting a user pick an origin and destination and see the computed route.
- Team workflow. Built as a group project with a defined backend/frontend split, including peer code review and unit tests written against teammates' components — the same interface-first discipline that makes a codebase safe for more than one person to touch.
Highlights
- Dijkstra's algorithm over a custom graph implementation, no library shortest-path.
- Hash-table map implemented from scratch and used as the graph's backing store.
- JavaFX interface integrated with the backend through a shared interface contract.
- Deployed to the UW–Madison CS department web server.
- Peer code review and unit tests written for teammates' components.
Stack
- Java
- JavaFX
- Dijkstra's algorithm
- Custom hash table
- JUnit