示例#1
0
        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));
        }
示例#2
0
 public RouteSolver(FloorPlan floorPlan)
 {
     _floorPlan = floorPlan;
 }