簡體   English   中英

使用 dijkstra 算法初始化邊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM