Откат в звезде

Голубые стены

Зеленые выделенные ячейки = открытый список

Красные выделенные ячейки = закрытый список

введите описание изображения здесь

Привет, может ли кто-нибудь сказать мне, как я могу реализовать обратное отслеживание в алгоритме поиска aa star? Я реализовал поиск по звездам в соответствии с wiki, но он не отступает, что я подразумеваю под обратным следом, так это то, что открытый список (зеленые ячейки) содержит 2,0 и 3,3, как показано на рисунке, после достижения 2, 0 текущий узел «прыгнет» на 3,3, так как стоимость теперь составляет более 3,3 и продолжит поиск оттуда, как это можно сделать, чтобы он возвращался с 2,0-> 2,1-> 2,2 … все обратно до 3,3 и начать поиск оттуда?

ваше изображение похоже на карту сетки 2d

Но ваш текст предлагает подход к графику, который немного запутан.

  • Для карты 2D-сетки затраты должны быть разными между ячейками на пути

У вас слишком много cost=100 и поэтому вы не можете отступить по пути. Вы должны увеличить или уменьшить затраты на каждом шаге и заполнить только ячейки, которые находятся рядом с последними заполненными ячейками. Это можно сделать путем рекурсии на больших картах или путем сканирования всей карты или ограничивающей frameworks для последнего заполненного числа на небольших картах.

  • Посмотрите здесь на мою реализацию C ++ A *

Откат

Может быть выполнено путем сканирования соседей стартовых / конечных ячеек после того, как A * заполнение всегда перемещается до наименьшей / большой стоимости

пример

В этом примере начните заполнение с (2,0) до (3,3) а затем отступите от (3,2) cost=8 до наименьшей стоимости (всегда cost-1 для инкрементного заполнения). Если вам нужен путь в обратном порядке, тогда начните заполнять с (3,3) вместо …

убыстрение

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

Вы можете следить за backpointers из двух узлов, пока не достигнете общего предка (0,2), а затем распечатайте узлы, которые вы посетили, следуя из (2,0), за которыми следуют узлы, которые вы посетили, следуя из (3,3) , напечатан в обратном порядке.

Чтобы найти общий предк двух узлов в дереве поиска A *, просто поддерживайте два «текущих узла» и следуйте обратному указателю на то, что имеет более высокую стоимость g, пока два текущих узла не будут в одном месте.

Следует отметить, что это странно. A * не является обходным путем, поэтому он не отступает.

  • Просмотр списка фильтров Android
  • Найти все элементы на странице, чей идентификатор элемента содержит определенный текст, используя jQuery
  • как рассчитать сложность двоичного поиска
  • Быстрый алгоритм быстрого поиска диапазона, в котором содержится номер в наборе диапазонов?
  • Как искать таблицы Google?
  • Сравнение изображений с OpenCV в Android
  • Как искать строку в нескольких файлах и возвращать имена файлов в Powershell?
  • Быстрый алгоритм поиска подстрок в строке
  • Стилизация SearchView в панели действий Android
  • Как узнать, какое хранилище ключей было использовано для подписи приложения?
  • Как создать RESTful поиск / фильтрацию?
  • Давайте будем гением компьютера.