Jan Van den Bergh's solution:

Source code not yet posted.

Time needed: about 12 hours.
Method: first, shortest path algorithm to find best way on the simplified map. Then backtracking to connect the dots.