This is known as the Travelling Salesman Problem (you can find it on Wikipedia), I know Triposo can do this for sights in a city - but I don't know if it can do cities. Personally I've always just put the points into Google Maps and rearranged them, but I was also travelling by train the last time I did that.