图路径查找器

时间:2015-11-28 00:33:06

标签: java recursion graph nodes

我正在尝试在两个节点(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);
    }
}

1 个答案:

答案 0 :(得分:0)

您正在将状态存储在递归函数中,并且不会将其传递给下一次迭代。因此,您只需反复运行一个函数,而无需更改其参数和影响其执行的状态。

我不想更正您的代码,因为我必须猜测您的意图才能提供一个很好的解释。

无论如何,我认为你是在尝试实现DFS,所以我建议你看看一些有效的实现。只是谷歌他们,有很多,例如this one附带一段theory,很简单,由Robert Sedgewick编写,因此可以信任。