public int SolvePuzzle(FloorPlan floorPlan, List <VisitNode> nodesToVisit, bool returnToOrigin = false) { List <NodeRoute> availableRoutes = new List <NodeRoute>(); foreach (VisitNode fromNode in nodesToVisit) { foreach (VisitNode toNode in nodesToVisit) { if (fromNode == toNode) { continue; } NodeRoute route = new NodeRoute(); route.FromNode = fromNode; route.ToNode = toNode; RouteSolver calcDistance = new RouteSolver(floorPlan); route.DistanceTravelled = calcDistance.DistanceBetween(fromNode, toNode); Console.WriteLine("From {5}: ({0},{1}) To {6}: ({2},{3}) Distance: {4}", route.FromNode.XPosition, route.FromNode.YPosition, route.ToNode.XPosition, route.ToNode.YPosition, route.DistanceTravelled, route.FromNode.PositionNumber, route.ToNode.PositionNumber); availableRoutes.Add(route); } } var startNode = nodesToVisit.Where(n => n.IsStartPosition); List <VisitNode> solveList = new List <VisitNode>(nodesToVisit.Except(startNode)); if (returnToOrigin) { solveList.Add(startNode.First()); } return(ShortestDistanceToAll(startNode.First(), solveList, availableRoutes, returnToOrigin)); }
public RouteSolver(FloorPlan floorPlan) { _floorPlan = floorPlan; }