由于没有反馈而重新发布(已删除上一篇文章)
我很困惑如何在实现我的Dijkstra算法时初始化我的Pointer(edge)类。 Node类包含一个Pointer的ArrayList,称为Neighbor,它代表Node任意一侧的4个邻居。 My Pointer类将目标Node(它指向的位置)作为构造函数中的参数。它们都被添加到一个36x25的2-dimmentional数组Node中。
截至目前,我正在使用setNeighbors()方法遍历构建在36x25网格上的每个节点,一旦构造完毕,每次搜索每个可能的节点多达4次,具体取决于它在网格中的相关性(一个角落)有两个邻居),并通过比较(x,y)坐标找到邻居后中断。
这个初始化过程对我来说需要的时间太长,所以我想知道是否有人可以告诉我一种方法,如果以更有效的方式进行初始化。提前谢谢。
我有一个Node节点:
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;
}
}
答案 0 :(得分:0)
那么你可以让网格表示类似于x和y上下限和上限的方形网格,然后你可以创建一个递归方法,在那里初始化一个节点(x,y)并且初始化节点将如果那些节点x,y位置仍然在网格中,则初始化其北/西/南/东邻居,否则你已经撞到了墙,你不能再朝这个方向初始化。这里的问题是Pointer
的作用,它似乎是一个使事情复杂化的类。如果网格是方形的,您可以保留
Node north;
Node west
Node south
Node east
Node类中的字段。
如果网格不是正方形,您仍然可以保留
List<Node> connectedTo