该代码适用于点数。我想重做它,花最短的时间而不考虑要花多少点 该算法找到了一种方法,但它并不总是最短的方法。我该如何处理它,以使它始终是最短的方法-考虑重量
ArrayList<Node> list = new ArrayList<>();
list.add(graph.getNode(startName));
Node endNode = graph.getNode(endName);
Node temp;
while(!list.isEmpty()) {
temp = list.get(0);
System.out.println("Temp node is: " + temp.getName()
+ " , distance to goal node is: " + graph.calcDistance(temp, endNode));
//test case
graph.setCostAndParent(temp.getName());
if(temp.getParent() != null) {
System.out.println("Parent: " + temp.getParent().getName()
+ " , cost: " + temp.getWeight());
}
//end test case
if(temp.getName().equals(endName)) {
return true;
}
temp.setTested(true);
list.remove(0);
if(!temp.isExpanded()) {
for(Node node : graph.getLinkedNodes(temp.getName())) {
addNodeToList(list, node, endNode);
}
temp.setExpanded(true);
}
}//end while
return false;
}
public void addNodeToList(ArrayList<Node> list, Node node, Node endNode) {
if (node.isTested() || list.contains(node))
return;
Node temp;
for (int i = 0; i < list.size(); i++) {
temp = list.get(i);
double lengthToInitialCurrent = graph.calcDistance(node, endNode);
double lengthToInitialTemp = graph.calcDistance(temp, endNode);
if (lengthToInitialCurrent < lengthToInitialTemp) {
list.add(i, node);
return;
} // end if
} // end for
list.add(node);
}//end method
}
如果有人可以帮助我... 我不知道如何驾驭这条路。