Пример #1
0
        public NodeState MakeChild(ref NodeState parentNode, int i)
        {
            //FROM and TO city indices
            int cityCount = Cities.Length;
            int fromCity  = parentNode.GetLastCityInRouteIndex();
            int toCity    = i;

            //Make a child matrix from parent
            double[,] copyMatrix  = CopyMatrix(parentNode.GetMatrix(), cityCount);
            double[,] childMatrix = MakeChildMatrix(copyMatrix, fromCity, toCity);

            //Inherit and add to lower bound for the child
            double childLB = parentNode.GetLowerBound() + parentNode.GetMatrix()[toCity, fromCity];

            //Inherit and add to route for the child
            ArrayList childRoute = (ArrayList)parentNode.GetRoute().Clone();

            childRoute.Add(Cities[toCity]);

            //Inherit the cities already visited by the parent and add the city the child is going to be in.
            List <bool> childCitiesVisited = CopyCitiesVisited(parentNode.GetCitiesVisited());

            childCitiesVisited[toCity] = true;

            return(new NodeState(childMatrix, childLB, childRoute, toCity, childCitiesVisited));
        }