用dijkstra算法初始化边缘(重新发布)

时间:2013-11-07 01:33:47

标签: java algorithm dijkstra edge initializing

由于没有反馈而重新发布(已删除上一篇文章)

我很困惑如何在实现我的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;
     }
}

1 个答案:

答案 0 :(得分:0)

那么你可以让网格表示类似于x和y上下限和上限的方形网格,然后你可以创建一个递归方法,在那里初始化一个节点(x,y)并且初始化节点将如果那些节点x,y位置仍然在网格中,则初始化其北/西/南/东邻居,否则你已经撞到了墙,你不能再朝这个方向初始化。这里的问题是Pointer的作用,它似乎是一个使事情复杂化的类。如果网格是方形的,您可以保留

Node north;
Node west
Node south
Node east
Node类中的

字段。

如果网格不是正方形,您仍然可以保留

List<Node> connectedTo