It would be fun to ski the whole Sun Peaks nordic trail network in a single day. Too lazy to plot a good route by hand, I wrote a computer program to do it. I’ve used the program to find several routes that traverse the entire trail network in under 43km — see below (click the image for a larger version).
Sun Peaks has about 35km of groomed nordic trails. But the shortest route that covers the whole network is longer — around 43km — since some trails are inevitably skied twice. (In graph-theoretic terms, the network has no Eulerian path because it has some odd-degree vertices: if an odd number of trails meet at an intersection, then at least one of those trails has to be skied twice.) The problem then is to choose which trails to ski twice, so that the total distance/elevation gain are as small as possible. The number of possible routes is astronomically huge; finding the optimal one is an instance of the “route inspection problem” or “Chinese postman problem”.
That’s about all the graph theory I know. Rather than using a graph-theoretic algorithm, I wrote some code that uses simulated annealing to search for a route that covers all the trails, while trying to minimize a weighted sum of the total distance and total elevation gain, and avoiding having to ski certain trails in an “undesirable” direction (e.g. I don’t really want to skate up En Garde in the middle of a 43km ski). The search is random, so every time the code runs it finds a different route. The routes shown above are just a few that offer some variety, though inevitably there are similarities.
In all there are 29 intersections and 48 trail segments (not including the two isolated trails to the village and outpost cabin). Stripping away the geography, the network graph looks like this (drawn using the igraph package in the R language):