В настоящее время я создаю программу, которая ест всю еду в лабиринте pacman. Однако моя программа вызывается каждый раз, когда Pacman делает новый ход, поэтому память не будет сохранена, когда программа закончится, и она вернет только движение: L, R, U или Down. Я новичок в AI, а также новичок в программировании на Java. Я знаю, что от поиска в Google, что лучший способ сделать это с BFS. Вопрос в следующем: как мне это сделать? Должен ли я создавать LinkedList для каждой позиции, которую я посещаю, содержащей путь, который меня туда привел? Пример: UULLDDLRRL.Поиск в лабиринте Pacman
Еще одно сомнение, что у меня есть, как я могу сделать pacman для поиска ближайшей пищи?
вот мой код, я удалил входную часть кода, что не имеет значения для моего вопроса. Я сохраняю карту из Pacman на char [] [].
class position{
int pX=0;
int pY=0;
char direction;
Boolean visited = false;
position(int pY, int pX, char direcao,Boolean visited)
{
this.pX=pX;
this.pY=pY;
this.direcao=direction;
this.direction=direction;
}
position()
{
pX=0;
pY=0;
direction='N';
visited=false;
}
}
position current = new position(pacmany,pacmanx,'N',false);
LinkedList<position> analise = new LinkedList<position>();
analise.addLast(current);
while(!analise.isEmpty())
{
if(m[current.pY-1][current.pX]!='#')
{
analise.addLast(new position(current.pY-1,current.pX,'U',false));
}
if(m[current.pY][current.pX+1]!='#')
{
analise.addLast(new position(current.pY,current.pX+1,'R',false));
}
if(m[current.pY+1][current.pX]!='#')
{
analise.addLast(new position(current.pY+1,current.pX,'D',false));
}
if(m[current.pY][current.pX-1]!='#')
{
analise.addLast(new position(current.pY,current.pX-1,'L',false));
}
analise.get(i).visited=true;
current=analise.get(i);
analise.remove();
}
}
}
* Как это сделать? *, Начав писать что-нибудь. В начале не имеет значения, используете ли вы «Список» или «Коллекция» или массив. Получите прототипирование. Кроме того, поиск «следующей пищи» - это всего лишь частный случай поиска по пятам. Если вы внедрили BFS, вы можете легко изменить состояние цели. – Turing85
Я что-то закодировал, но у меня проблемы с внедрением BFS. обновил сообщение – litos
Ваш вопрос немного неоднозначен. Вы спрашиваете «как найти ближайшую пищу» или «как найти самый короткий путь, который включает всю пищу».Первое довольно тривиально, а второе, как считается, невозможно сделать эффективно (хотя это еще предстоит доказать математически - поиск проблемы с NP-полным или коммивояжером в google, если вы заинтересованы в деталях). – sprinter