It is an extremely hard problem to solve. But some reasonable heuristics are easy to explain/code.
One is to start at a random vertex, each step move to the vertex that hasn't been visited yet that is closest. Rinse and repeat.
Another is to start with a minimal spanning tree of the graph, pick any vertex as starting point (root), and visit the vertices in preorder. If you are asked to visit a vertex that you already visited, just skip it for the next one in preorder. Think about it as walking along the "outside" of the tree, taking shortcuts to the next when asked to visit a vertex again. This works rather well if the distances have the triangular property (i.e., $c(u v) \le c(u x) + c(x v)$ for all vertices).
See if you can come up with another idea.