0

Java で Dijkstra アルゴリズムをコーディングしています。私の最初の方法

public void populateDijkstraFrom(Node startNode)

それぞれの距離と先行ノードを含むノードのリンク リストを作成します。私の2番目の方法

public List<Node> getShortestPath(Node startNode, Node targetNode)

populateDijkstraFrom メソッドからのノードのリストを使用して、startNode から targetNode までの最短パスを持つノードのリストを作成することになっています。

しかし、getShortestPath メソッドで Dijkstra メソッドからノードのリストにアクセスする方法がわかりません。戻り値の型を void から LinkedList に変更することはできましたが、void を使用すると機能すると言われました。

どうすればいいのですか?

ありがとう

4

3 に答える 3

0

おそらく、populateDijkstraFromその結果を囲んでいるクラスのメンバーに格納するメソッドを取得すると、その時点で からアクセスできるようになりますgetShortestPath

public class Foobar {
    private List<Node> distances;

    public void populateDijkstraFrom(Node startNode) {
       // ...
       distances = ...
    }

    public List<Node> getShortestPath(Node startNode, Node targetNode) {
       // use distances here!
    }
}
于 2013-06-20T00:58:08.887 に答える
0

これを解決するには、基本的に2つの方法があります。

最も簡単なのは、メソッドのノードのリストを返すことです

public List<Node> populateDijkstraFrom(Node startNode) {
       // ^ Configure to return list instead of void

    // ......
    return nodeList;
}

public List<Node> getShortestPath(Node startNode, Node targetNode) {
    List<Node> pdList = populateDijkstraFrom(startNode);
    // ^ --- Get the list by simply passing the same parameter to the method
}

もう一つはジャイアンによって述べられています

于 2013-06-20T01:00:53.443 に答える
0

Node クラスの構造に依存します。

署名を変更する必要はありません。構造によって異なります。私は(適切なゲッターとセッターを使って)のようなものを期待します

public class Node {
    List<NodeConnection> nodeConnections;
}


public class NodeConnection {
    Node targetNode;
    long distance;
}

したがって、startNode の nodeConnections を繰り返し処理して、ターゲット ノードへのパスを見つけます。

于 2013-06-20T01:03:18.747 に答える