Эта функция должна проверить все вершины в наборе открытых вершин,
и после этого она должна вернуть ссылку на вершину с наименьшей общей стоимостью. Если в "открытом" наборе нет вершин, функция возвращает
NULL.
Не удаляйте вершину из набора после того, как вы вернули ее; просто верните ссылку на точку с наименьшей общей стоимостью.
3)public boolean addOpenWaypoint(Waypoint newWP)
Это самый сложный метод в классе состояний А*. Данный метод усложняет то, что он должен добавлять указанную вершину только в том случае, если существующая вершина хуже новой. Вот что должен делать этот метод:
Если в наборе «открытых вершин» в настоящее время нет вершины для данного местоположения, то необходимо просто добавить новую вершину.
Если в наборе «открытых вершин» уже есть вершина для этой локации, добавьте новую вершину только в том случае, если стоимость пути до новой вершины меньше стоимости пути до текущей. (Убедитесь, что используете не общую стоимость.) Другими словами, если путь через новую вершину короче, чем путь через текущую вершину, замените текущую вершину на новую
Как вы могли заметить, что в таком случае вам потребуется извлечь существующую вершину из «открытого набора», если таковая имеется. Данный шаг довольно прост - замените предыдущую точку на новую, используя метод
HashMap.put(), который заменит старое значение на новое. Пусть данный метод вернет значение true, если новая вершина была успешно добавлена в набор, и false в противном случае.
4)public boolean isLocationClosed(Location loc)
Эта функция должна возвращать значение true, если указанное местоположение встречается в наборе закрытых вершин, и false в противном
случае. Так как закрытые вершины хранятся в хэш-карте с расположениями в качестве ключевых значений, данный метод достаточно просто в реализации.
5)public void closeWaypoint(Location loc)
Эта функция перемещает вершину из набора «открытых вершин» в набор
«закрытых вершин». Так как вершины обозначены местоположением, метод принимает местоположение вершины.
Процесс должен быть простым:
Удалите вершину, соответствующую указанному местоположению из набора «открытых вершин».
Добавьте вершину, которую вы удалили, в набор закрытых вершин.
Ключом должно являться местоположение точки.
Компиляция и тестирование
Как только вы реализуете вышеуказанную функциональность, запустите программу поиска пути, чтобы проверит правильность ее выполнения. Если вы реализовали все правильно, то у вас не должно возникнуть проблем при создании препятствий и последующим поиском путей вокруг них.
Скомпилируйте и запустите программу также, как и всегда: javac *.java
java AStarApp