![](/img/trans.png)
[英]Java: Dijkstra's Algorithm - change number of edges using random edges
[英]Initializing edges with dijkstra's algorithm
在實現我的 Dijkstra 算法時,我對如何初始化我的指針(邊緣)類感到困惑。 Node 類持有一個指針的稱為鄰居的 ArrayList,代表節點任意一側的 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;
}
}
好吧,您可以讓網格表示類似於在 x 和 y 上都有下限和上限的方形網格,然后您可以創建一個遞歸方法,在 (x,y) 處初始化一個節點,該初始化節點將初始化其北/west/south/east 鄰居,如果這些節點的 x,y 位置仍在網格內,否則您已經撞到了牆壁,並且無法再在該方向上初始化。 這里的問題是Pointer
作用,它似乎是一個使事情復雜化的類。 如果網格是方形的,你可以保持
Node north;
Node west
Node south
Node east
Node 類中的字段。
如果網格不是方形的,你仍然可以保持一個
List<Node> connectedTo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.