1) Проблема, с которой я столкнулся бы при использовании BFS или DFS в этой ситуации, заключается в том, насколько неэффективным это окажется, особенно в примере с полной картой. Чтобы заставить любой алгоритм работать с несколькими целями, вы можете либо построить поиск, чтобы он не заканчивался после того, как найден первый путь, но это все равно не дало бы вам «оптимальный» путь для каждого куска еды на карте. Или вы могли бы пройти путь от пакмана до ближайшей еды, от этой еды до ближайшей ближайшей и т. д., найти эти пути, а затем сравнить их, чтобы найти действительно оптимальный путь, но я не хочу думать о том, как долго это будет продолжаться. брать.
2) Я бы, вероятно, придерживался жадного A *, который смотрит только на ближайшую еду (в большинстве случаев я не вижу проблем с расстоянием до Манхэттена, так как карта для pacman уже является сеткой; неоптимальный для крайних случаев, когда стены мешают Pacman получить доступ к ближайшему, но это трудная проблема для решения. Манхэттен будет приличным, возможно, измененным плотностью еды, а не просто расстоянием, что-то вроде:
(Манхэттенское расстояние) / (общее количество еды в 3х3 квадрата еды)
3) Если не использовать поиск пути к каждому элементу, а затем выбирать самый короткий, я думаю, что Манхэттен хорошо подойдет для сценария с несколькими пунктами. Он не всегда выбирает лучшего, но 100% оптимальный ИИ обычно не лучшая цель для игр.
В этом случае я бы хотел попробовать жадный А * с кластерами предметов, способствующих весу, в качестве простого и прилично быстрого решения.
Более сложное решение, которое должно возвращаться к оптимальным путям, которым должен следовать Пакман, - использовать алгоритм для поиска Минимального связующего дерева
http://en.wikipedia.org/wiki/Minimum_spanning_tree но я не знаю, насколько это легко осуществить. Вот вопрос, обсуждающий достоинства двух алгоритмов минимального остовного дерева: Крускал против Прима