Beispiel #1
0
        public IList <AStarNode> Expand(AStarNode state)
        {
            AddInitial(state); // dodaj startowy element do listy zamkniętych(odwiedzonych)
            AStarNode tmp;

            while (!IsGoal(ClosedList.Last()))
            {
                OpenList.OrderBy(p => p.F); //lista otwartych posortowana wg najmniejszej wagi współczynnika F
                tmp = OpenList.First();     //weź pierwszy element z otwartej listy(najlepiej prosperujący)
                RemoveFirst(OpenList);      //przenieś do zamkniętej
                tmp.Opened = false;
                tmp.Closed = true;
                AddToClosed(tmp);
                ManageNeighbours(ClosedList.Last()); //dodaj sąsiadów do otwartej listy lub zaktualizuj wsp F i rodzica
            }

            AStarNode parent = Goal; //uzupełnij listę ze ścieżką poprzez wybranie elementu docelowego i rekursywnie dodaj wszystkie elementy połączone

            while (parent != null)
            {
                StackTrace.Insert(0, parent);
                parent = parent.Parent;
            }
            return(StackTrace);
        }