我正在尝试在两个节点(sourcenode和targetnode)之间找到一条路径。我想出了这个代码,但我似乎无法让它递归地找到一条路径。如果找到目标节点,我甚至将节点设置为null但我不断收到堆栈溢出错误。
public void findPathBetween(Node sourceNode, Node targetNode){
//find a path between the sourceNode and targetNode
//select the nodes and edges along the path if one exists.
ArrayList<Node> nodesToSearch = new ArrayList<Node>();
nodesToSearch.add(sourceNode);
//basis
if(sourceNode == null || targetNode == null) return;
//recursion
ArrayList<Node> newNodesToSearch = new ArrayList<Node>(); //get nodes for next level to search
for(Node aNode : nodesToSearch) {
for (Node neighbour : aNode.getNeighbours()) {
if (neighbour != targetNode && newNodesToSearch.isEmpty()) {
newNodesToSearch.add(neighbour);
neighbour.setSelected(true);
edgeBetween(aNode, neighbour).setSelected(true);
sourceNode = neighbour;
}
if (neighbour == targetNode) {
sourceNode = null;
targetNode = null;
return;
}
}
}
if(sourceNode != null &&targetNode != null) {
findPathBetween(sourceNode, targetNode);
}
}
答案 0 :(得分:0)
您正在将状态存储在递归函数中,并且不会将其传递给下一次迭代。因此,您只需反复运行一个函数,而无需更改其参数和影响其执行的状态。
我不想更正您的代码,因为我必须猜测您的意图才能提供一个很好的解释。
无论如何,我认为你是在尝试实现DFS,所以我建议你看看一些有效的实现。只是谷歌他们,有很多,例如this one附带一段theory,很简单,由Robert Sedgewick编写,因此可以信任。