LINUX.ORG.RU

Имплементация А* на С

 , ,


0

4

Всем привет. Понадобилось забацать поиск пути в игрушке, которую пишу на С. Несколькоминутный поиск привёл к алгоритму «А звёздочка». Поискал описание алгоритма, нашёл неплохое объяснение вот здесь и здесь. Раскурил листинг на питоне, а вот как это портировать на С? Даже не знаю с чего начинать. Буду рад любым советам/ссылкам/посылам/etc ☺



Последнее исправление: ubik (всего исправлений: 1)

В чём конкретно проблема? Создаёшь структуру графа с маркером узла, начинаешь идти от заданной точки в соответствии с алгоритмом, помечая пройденные (уже не помню подробности алгоритма, читать лень).

alexanius ★★
()

Раскурил листинг на питоне, а вот как это портировать на С?

Ну значит не раскурил, если такие вопросы задаешь.

Crocodoom ★★★★★
()

На гитхаб тот же зайди и вбей в поиск pathfinding language:C, раз сам не догоняешь.

Bfgeshka ★★★★★
()

Создай структуру связного списка и функции работы с ним

используй связный список для создания фронта

создай массив для клеток поля для поиска

начальный фронт - список из начального элемента

все клетки массива непосещённые

дальше по алгоритму в два цикла

dimon555 ★★★★★
()
Ответ на: комментарий от anonymous

единственный полезный совет в этом треде.

anonymous
()

Ну, у тебя есть уже реализация на питоне. Возьми ее. Тебе только понадобится реализовать на С list и set. В остальном ты можешь почти дословно брать тот питоновский код.

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Либо взять библиотеку контейнеров на С, и просто переписать код, благо либ контейнеров для С в достатке.

fsb4000 ★★★★★
()

печаль ситуации в том что «хитрое» А* эт же простейшей поиск в ширину с пометкой уже посещённых локаций.

если же у тя проблемы с реализацией/(nih)использованием_готовых_реализаций - может ты не тем по жизни занят а?

anonymous
()
Ответ на: комментарий от anonymous

«хитрое» А* эт же простейшей поиск в ширину с пометкой уже посещённых локаций.

Я тоже долго так думал. Потом выяснилось, что это не так. Там ещё есть функция «выбор направления», которая выбирает в какую сторону растекаться в первую очередь.

Einstok_Fair ★★☆
()
Ответ на: комментарий от anonymous

Вставляй точки с запятыми в конце строк.

rupert ★★★★★
()

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

Silerus ★★★★
()

ЗДРАВСТВУЙТЕ Я ПРОГРАММИСТ! КАК МНЕ НАПИСАТЬ КОД ПО ГОТОВОМУ АЛГОРИТМУ?
Сука, какой-то сюрреализм вообще.

thesis ★★★★★
()
Ответ на: комментарий от Einstok_Fair

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

т.е

важнее после изучения поиска в глубину и ширину ознакамливаться с поиском где в качестве сд приоритетная очередь и как в зависимости от разной стратегии придания веса получаем весь спектр поисков включая и А*

anonymous
()
Ответ на: комментарий от Einstok_Fair

Ничего хитрого. Вместо очереди используешь очередь с приоритетами. В качесте параметра приоритета выбираешь некоторую функцию f(степень-близости-в-конечной-точке, пройденный-путь). Первый параметр увеличивает приоритет, а второй понижает. Можно еще добавить некоторой эврестической отсечение совсем плохих путей.

Aswed ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.