我用Java编写Dijkstra算法。我的第一个方法
public void populateDijkstraFrom(Node startNode)
创建一个链接的节点列表及其各自的距离和前驱。我的第二种方法
public List<Node> getShortestPath(Node startNode, Node targetNode)
应该使用populateDijkstraFrom方法中的节点列表创建一个节点列表,其中包含从startNode到targetNode的最短路径。
但是,我不知道如何在getShortestPath方法中从我的Dijkstra方法访问节点列表。我可以将返回类型从void更改为LinkedList,但我被告知它使用void。
我该怎么做?
由于
答案 0 :(得分: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!
}
}
答案 1 :(得分: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
}
Gian表示另一个
答案 2 :(得分:0)
取决于Node类的结构。
您无需更改签名。取决于你的结构。我希望有类似的东西(有适当的吸气剂和制定者)
public class Node {
List<NodeConnection> nodeConnections;
}
public class NodeConnection {
Node targetNode;
long distance;
}
因此,您将遍历startNode上的nodeConnections以查找目标节点的路径。