
Mario Kart World works with an open-world structure, where the 31 standard racing tracks are connected by "intermissions", which are point-to-point transitional drives that link the map together. These intermissions became somewhat controversial, as people quickly classified them as "dead space" between the tracks. After spending a significant amount of time playing the game for myself, I was convinced otherwise: While there are many intermissions that do not contribute anything of significance to the game, there are just as many intermissions that are either just good, or even better than some of the proper "tracks". Some tracks even have wildly different layouts depending on what intermission is used to drive into the track.
The reason for this post is related to this: I wanted to introduce my brother to the game. My goal was to create a continuous route for a full 32-race Versus mode session that visited every track in the game. Finding a route that hits every track exactly once while maximizing the number of high-quality intermissions presents a classic routing challenge.
To solve this, I modeled the MK World map as a graph and treated the route planning as an asymmetric Traveling Salesman Problem (TSP). I assigned custom weights (costs) to each intermission edge, making my preferred transitions mathematically cheaper.
The routing engine I built required specific technical constraints to accurately reflect the game's map:
- Directed Edges: On some intermissions, one direction is clearly better than the other way around (e.g. Toad's Factory to Wario Stadium) or result in different track layouts being played (e.g. Shy Guy Bazaar).
- Sparse Graph: Tracks only connect to a limited subset of tracks, there is no direct intermission between EVERY track.
- Forced Start/End Nodes: Because Rainbow Road has no exit, it had to be the last track. And, it felt fitting to use Acorn Heights as the starting point.
Obtaining the dataset of all the tracks with names and icons, and their intermissions was a task that took me two hours, but I got there. To interface with the solver, I built a visual editor to map the nodes, adjust edge weights, and execute the algorithm iteratively until it output a route I was happy with.

After generating the initial layout, I shared the graph on Reddit for feedback. The community provided routing suggestions, such as expanding the route to exactly 32 races by including an alternate track variant of Crown City or taking other intermissions I had not considered. By adjusting the edge constraints, I forced the solver to route through Shy Guy Bazaar a second time to trigger the Daisy Palace variant, and adjusted the approach to Crown City to include both the rooftop and VS-exclusive ocean variants as separate nodes.
And this is the final result!

The code can be found here, but keep in mind that all this was created in two days so the code really is not great and there is no documentation. Have fun ;-)