Java 是否可以使用深度优先搜索来搜索每个节点?
我正在研究深度优先搜索,我找到的示例正在寻找一个特定的答案,比如数字10 它遍历树,丢弃每个不是10的节点,并在找到10时停止 是否可以使用深度优先搜索或其他算法来搜索树的每个分支?我想让它运行一个场景,产生一个值,并将其存储到一个可能名为Java 是否可以使用深度优先搜索来搜索每个节点?,java,search,tree,depth-first-search,Java,Search,Tree,Depth First Search,我正在研究深度优先搜索,我找到的示例正在寻找一个特定的答案,比如数字10 它遍历树,丢弃每个不是10的节点,并在找到10时停止 是否可以使用深度优先搜索或其他算法来搜索树的每个分支?我想让它运行一个场景,产生一个值,并将其存储到一个可能名为highestValue的变量中 然后它将搜索下一个分支并获取一个值,并将其存储到一个可能命名为value的变量中。然后,它会比较最高位值和最高位值,如果(Value>highestValue)highestValue=Value 它将重复该过程,直到完成所有
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我仍在努力弄清楚这一切是如何运作的,但在大多数情况下,我只是想知道是否有可能告诉它不要停止,因为我发现的每个例子都有一个特定的目标。你刚才回答了我的问题,谢谢!