0

我正在用 Java 编写 Dijkstra 算法。我的第一个方法

public void populateDijkstraFrom(Node startNode)

创建节点的链接列表及其各自的距离和前任。我的第二种方法

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

基本上有两种方法可以解决这个问题。

最简单的方法是返回方法中的节点列表

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 类的结构。

您无需更改签名。取决于你的结构。我希望像(使用适当的 getter 和 setter)

public class Node {
    List<NodeConnection> nodeConnections;
}


public class NodeConnection {
    Node targetNode;
    long distance;
}

因此,您正在迭代 startNode 上的 nodeConnections 以找到到目标节点的路径。

于 2013-06-20T01:03:18.747 回答