public override List <State> ChildStates(State parentState)
        {
            List <Int16> unvisitedCities = FilterUnvisitedCities(parentState.path, SearchInfo.AllCities);
            List <State> childStates     = new List <State>();

            if (unvisitedCities.Count == 0)
            {
                return(ReturnBottomChild(parentState, childStates));
            }
            else
            {
                foreach (Int16 c in unvisitedCities)
                {
                    State child = (State)State.DeepClone(parentState);
                    child.AddCityToPath(SearchInfo.AllCities[c]);
                    if (SearchInfo.Visualize)
                    {
                        DrawingBoard.DrawPath(child, SearchInfo.AllCities);
                        Thread.Sleep(500);
                    }
                    child.Cost += City.TravelCostBetweenCities(SearchInfo.AllCities[child.path[child.path.Count - 2]], SearchInfo.AllCities[c]);
                    List <State> tmp = ChildStates(child);
                    foreach (State s in tmp)
                    {
                        childStates.Add(s);
                    }
                }
                return(childStates);
            }
        }
Exemple #2
0
 protected List <State> ReturnBottomChild(State parentState, List <State> childStates)
 {
     if (SearchInfo.ReturnToStart)
     {
         parentState.AddCityToPath(SearchInfo.AllCities[0]);
         parentState.Cost += City.TravelCostBetweenCities(SearchInfo.AllCities[parentState.path[parentState.path.Count - 2]], SearchInfo.AllCities[0]);
     }
     childStates.Add(parentState);
     return(childStates);
 }