Я не понимаю, как инициализировать класс Pointer (edge) при реализации моего алгоритма Дейкстры. Класс Node содержит ArrayList вызываемых соседей Pointer, которые представляют 4 соседей с любой стороны узла. Мой класс Pointer принимает целевой узел (куда он указывает) в качестве аргумента в конструкторе. Все они добавлены в двумерный массив узлов размером 36x25.
На данный момент я использую метод setNeighbors(), просматривающий каждый узел, построенный на сетке 36x25, после того, как все они были построены, который просматривает каждый возможный узел до 4 раз в зависимости от его релевантности в сетке (у угла есть 2 соседа ) и прерывается, как только сосед найден путем сравнения координат (x, y).
Этот процесс инициализации занимает слишком много времени для моей цели, поэтому я хотел знать, может ли кто-нибудь показать мне способ, который сделал бы эту инициализацию более эффективной.
У меня есть узел класса:
import java.util.ArrayList;
public class Node implements Comparable<Node>
{
public int x;
public int y;
public ArrayList<Pointer> neighbors = new ArrayList<Pointer>();
public double minDistance = Double.POSITIVE_INFINITY;
public Node previous;
public Node(int xPos, int yPos)
{
x = xPos;
y = yPos;
}
public int compareTo(Node other)
{
return Double.compare(minDistance, other.minDistance);
}
}
И указатель класса:
public class Pointer
{
public final Node target;
public final double weight = 1;
public Pointer(Node targ)
{
target = targ;
}
}