И A * алгоритм псевдокод

Q:

1. рукописного алгоритма *, чтобы найти кратчайший путь

2. Напишите псевдокод

 

A:

1. * Процесс алгоритм:

1. Во-первых, начальное положение точки добавляется в список, называемый «открытый список» в процессе поиска пути, в настоящее время, можно сказать, что открытый список Этот список будет храниться много точек для тестирования, который является воротами к целевой точке ключевой момент, будущее будет постепенно заполнить, чтобы добавить больше контрольных точек, в то время как интерес к эффективности, этот список, как правило, уже отсортированный список.

2. Если список открыт список не пуст, а затем повторите следующее:

(1) найти наименьшее точку в целевой цены, чтобы открыть список в качестве текущей точки доступа;

(2) текущий момент в список, называемый близкий список;

(3) указывает на текущих четырех точках вокруг каждого процесса (это, чтобы ограничить движение под наклоном), если точка находится на этой точке и не близко список Список, обработка следующим образом;

4) Если точка происходит с целевой точкой, поставить точку родительского узла текущей точки, и происходит выход из цикла, то установленный флаг пути было найдено;

(5) Если точка не находится в открытом списке, то стоимость расчета узла к узлу назначения, родительский узел текущей точки как точки, и добавить узел в открытом список;

6) Если точка уже находится в открытом списке, стоимость текущей точки и точки до точки назначения сравнения, если текущая стоимость меньшей точки, помещает текущую точку в качестве точки родительского узла, а пересчитывается цена точки до пункта назначения, а также открытый список переупорядочения;

3. После завершения цикла выше, если вы нашли путь, начиная от целевой точки, а затем нажмите кнопку Найти родительский узел для каждого узла до тех пор, пока не найдете начальную точку, образуя таким образом путь. 

 

 

2. Алгоритм псевдокода

Сначала создать в структуру данных узла:

структура Node {

   INT г;    // Г значение узла  

   ИНТ ч;    // Н значение узла 

   ИНТ е;    // диафрагменное значение узла

   Узел * предварительно; // перед узлом узла

};

 

AStar_Search () {

   структура узла start_node;

   start_node.g = 0;

   start_node.h = Н (начало);

   start_node.f = start_node.h;

   start_node.pre = NULL;

   ОТКРЫТЫЙ = [start_node]; ЗАКРЫТЬ = [];

  

   в то время как (OPEN не пусто) {

      Узел с наименьшим значением F получается из ОТКРЫТОГО связанного списка,

      который называется x_node, и соответствующий узел называются й;

      Удалить x_node из открытого списка;

      если (х представляет собой конечный узел) {

          Возвращает путь

          в соответствии с предварительно указателем структуры узла, соответствующей каждый узел;

      }

      для (каждого последующего узла у й) {

          структура узла y_node;

          y_node.g = x_node.g + W (х, у);

          y_node.h = Н (у);

          y_node.f = y_node.g + y_node.h;

          y.pre = x_node;

         

          если (у не в открытой таблице , а не в ЗАКРЫТЬ таблицу) {

             Поместите y_node в открытой таблице;

          } Еще   если (у находится в открытой таблице) {

             Вынуть структуру узла, соответствующую у узла в открытой таблице,

             который называется y_open;

             если (y_node.f <y_open.f) {

                y_open.g = y_node.g;

                y_open.h = y_node.h;

                y_open.f = y_node.f;

                y_open.pre = y_node.pre;

             }

          } Еще {

             Извлеките структуру узла, соответствующую у узла в таблице ЗАКРЫТЬ,

             который называется y_close;

             если (y_node.f <y_close.f) { 

                Удалить y_close из списка ЗАКРЫТЬ

                Поместите y_node в открытой таблице;

             }

          }

      }  // конец для

     

      Поместите x_node в ЗАКРЫТЬ таблицу;

   }  // конец в то время как

// конец AStar_Search

 

рекомендация

отblog.csdn.net/weixin_43821874/article/details/94737711