#java #a-star
#java #a-star
Вопрос:
Итак, в настоящее время у меня возникли проблемы с завершающими штрихами моего поиска пути A *, у меня есть все необходимые вспомогательные функции для этого, и я фактически реализовал этот алгоритм как в Javascript, так и в ActionScript, однако я спотыкаюсь об использовании списков в Java.
В ней нет ошибок, но мне нужно внести последние штрихи, чтобы я мог протестировать, чтобы убедиться, что она функционирует должным образом.
Что мне нужно сделать, так это отсортировать openList, чтобы я мог получить узел с наименьшей стоимостью, вот где мне нужна помощь.
Вот что у меня есть:
public class Pathfinding
{
List<Node> closedList = new ArrayList<Node>();
List<Node> openList = new ArrayList<Node>();
public Node calculateShortestDistance(List<Integer> tiles, Node start, Node goal, List<Integer> passableTiles)
{
Node currentNode = new Node(start.row, start.col, start.gCost, start.fCost, null);
while(!catchMeIfYouCan(currentNode, goal))
{
int row = currentNode.row;
int col = currentNode.col 1;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//left child
col -= 2;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//top child
col ;
row--;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//bottom child
row = 2;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//bottom right
col ;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//bottom left
col -= 2;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//top left
row -= 2;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//top right
col = 2;
addChild(row, col, tiles, passableTiles, currentNode, goal, openList, closedList);
//Put currentNode in the closedList
closedList.add(currentNode);
//Sort the openList
//Assign currentNode to the last element in the List
}
return currentNode;
}
Комментарии:
1. В чем вопрос?
2. Сортировка, я думаю? Я отвечаю на это…
3. Вы правы, Анубиан, извините, если это не так понятно. Я отредактировал его в надежде, что это сделает его немного понятнее для зрителей.
4. Кроме того, предоставленный вами код не является точным или не соответствует теме…
5. Как код не точен и не соответствует теме? Мне жаль, что вы так считаете, однако это соответствующий раздел кода, в котором у меня возникла проблема.
Ответ №1:
Сортировка списка довольно проста. Во-первых, вам нужно сделать узел сопоставимым:
class Node implements Comparable<Node>
Затем вам нужно написать:
public boolean compareTo(Node other)
Это должно быть проверкой на равенство.
Затем вы можете легко использовать Collections.sort()
:
Collections.sort(openList);