Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用深度优先搜索来搜索每个节点?_Java_Search_Tree_Depth First Search - Fatal编程技术网

Java 是否可以使用深度优先搜索来搜索每个节点?

Java 是否可以使用深度优先搜索来搜索每个节点?,java,search,tree,depth-first-search,Java,Search,Tree,Depth First Search,我正在研究深度优先搜索,我找到的示例正在寻找一个特定的答案,比如数字10 它遍历树,丢弃每个不是10的节点,并在找到10时停止 是否可以使用深度优先搜索或其他算法来搜索树的每个分支?我想让它运行一个场景,产生一个值,并将其存储到一个可能名为highestValue的变量中 然后它将搜索下一个分支并获取一个值,并将其存储到一个可能命名为value的变量中。然后,它会比较最高位值和最高位值,如果(Value>highestValue)highestValue=Value 它将重复该过程,直到完成所有

我正在研究深度优先搜索,我找到的示例正在寻找一个特定的答案,比如数字10

它遍历树,丢弃每个不是10的节点,并在找到10时停止

是否可以使用深度优先搜索或其他算法来搜索树的每个分支?我想让它运行一个场景,产生一个值,并将其存储到一个可能名为
highestValue
的变量中

然后它将搜索下一个分支并获取一个值,并将其存储到一个可能命名为value的变量中。然后,它会比较最高位值和最高位值,如果(Value>highestValue)
highestValue=Value


它将重复该过程,直到完成所有可能的场景的运行。有什么想法吗?我应该提到我是用Java编写的。

如果我们想访问图中的每个节点,DFS是最简单的。但是,如果我们有一个非常大的树,并且希望在距离原始节点太远时准备退出,DFS可以搜索该节点的数千个祖先,但永远不会搜索所有的子节点。
严格来说,这取决于图形中的数据是如何组织的

由于您仍在想它是如何工作的,这段代码可能会帮助您了解这一点。这适用于图形,请看。它会对每个节点进行DFS,但在到达要查找的节点时停止

要获得最大值,只需将max值存储到int变量中,然后继续搜索并将每个节点的数据与int变量中的当前max进行比较

public static boolean search(Graph g, Node start, Node end) {
    LinkedList<Node> stack = new LinkedList<Node>();
    for (Node u : g.getNodes()) {
        u.state = State.Unvisited;
    }
    start.state = State.Visiting;
    stack.add(start);
    Node u;
    while (!stack.isEmpty()) {
        u = stack.removeFirst();
        if (u != null) {
            for ( Node v : u.getAdjacent() ) {
                if (v.state == State.Unvisited) {
                    if (v == end) {
                        return true;
                    }
                    else {
                        v.state = State.Visiting;
                        stack.add(v);
                    }
                }
            }
            u.state = State.Visited;
        }
    }
    return false;
}
公共静态布尔搜索(图g,节点开始,节点结束){
LinkedList堆栈=新建LinkedList();
对于(节点u:g.getNodes()){
u、 状态=状态。未访问;
}
start.state=state.visting;
stack.add(开始);
节点u;
而(!stack.isEmpty()){
u=stack.removeFirst();
如果(u!=null){
对于(节点v:u.getNextant()){
如果(v.state==state.Unvisited){
如果(v==结束){
返回true;
}
否则{
v、 州=州。访问;
堆栈。添加(v);
}
}
}
u、 state=state.visted;
}
}
返回false;
}

只要。。。当它到达你的目标时不要叫它停下来?我不明白这里有什么问题。你能提供你想要的代码和特定的输入/输出吗?@Eric我仍在努力弄清楚这一切是如何运作的,但在大多数情况下,我只是想知道是否有可能告诉它不要停止,因为我发现的每个例子都有一个特定的目标。你刚才回答了我的问题,谢谢!