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); }