English Version            Русская версия

 [ Разделы сервера ]  [ Карта сервера ]  [ Новости сервера ] [ Обратная связь ]



Во многих случаях (таких как эти карты, в которых нет изменений местности, подобно реализациям, использованным позднее в данном разделе), путь с наименьшим счетом также приводит к кратчайшему пути. Разъяснение A*, почти на обычном языке Давайте посмотрим на сам алгоритм на псевдо-коде. 1 AЗвезда.Поиск 2 создать открытый массив 3 создать замкнутый массив 4 s.g = 0 5 s.h = НайтиЭвристику( s.x, s.y ) 6 s.f = s.g + s.h 7 s.родитель = ноль 8 Поместить в открытый массив 9 установить признакПоиска в true 10 Пока признакПоиска 11 взять узел n из открытого 12 Если n равно узлу назначения 13 создать путь от начала до конца 14 установить признакПоиска в false 15 для каждого соседа m из n 16 newg = n.g + стоимость( n, newx, newy ) 17 Если m не был посещен 18 m.g = n.f 19 m.h = найтиЭвристику( newx, newy ) 20 m.f = m.g + m.h 21 m.родитель = n 22 добавить его в открытый массив 23 сортировать открытый массив 24 Иначе 25 Если newg < m.g 26 m.родитель = n 27 m.g = newg 28 m.f = m.g + m.h 29 сортировать открытый массив 30 Если m находится в замкнутом 31 удалить его из замкнутого 32 Поместить n в замкнутый массив 33 Если время поиска > максимальное время 34 установить флагПоиска в false 35 вернуть path Этот алгоритм использует два списка (который во Flash являются массивами), открытый и замкнутый. Открытый массив содержит все узлы, которые были раскрыты (то есть, все его соседи, которые были посещены). Мы используем открытый массив как приоритетную ветвь. Мы используем открытый массив не только для хранения узлов, но также для хранения узлов в определенном порядке. Мы поддерживаем массив отсортированным от меньшего счета (f) к большему. Каждый раз, когда мы добавляем узел в открытый массив или изменяем значение g в узле открытого массива, мы должны сделать новую сортировку массива, с тем чтобы расположить узлы по значению стоимости от меньшей к большей
Hosted by uCoz