private Tour ConstructTour(List <Stop> stops) { var tour = new Tour(stops); _travelService.NormalizeStops(tour.Stops); _travelService.CalculateDistanceMatrix(tour); var(stop0, stop1) = tour.GetFarthestPair(); tour.TourStops.Add(stop0); tour.TourStops.Add(stop1); tour.TourStops.Add(stop0); while (tour.TourStops.Count < stops.Count() + 1) { var farthestStop = tour.FindFarthestStop(); tour.InsertAtLeastExpensiveEdge(farthestStop); } if (tour.TourStops.First() != tour.Stops.First()) { var desiredStart = tour.TourStops.Single(ts => ts == tour.Stops.First()); tour.TourStops = Helper.Reorder(tour.TourStops, desiredStart); } return(tour); }