我正在研究深度优先搜索,我发现的例子正在寻找一个特定的答案,让我们说数字10。
它遍历树,丢弃不是10的每个节点,并在找到10时停止。
是否可以使用深度优先搜索或其他算法来搜索树的每个分支?我希望它运行一个场景并提出一个值并将其存储到一个可能名为highestValue
的变量中。
然后它会搜索下一个分支并获取一个值并将其存储到一个可能名为Value的变量中。然后,它会将highestValue与Value和if (Value > highestValue)
highestValue = Value
进行比较。
它将重复该过程,直到它完成每个可能的场景运行。有任何想法吗?我应该提一下,我是用Java写的。
答案 0 :(得分:0)
如果我们想访问图中的每个节点,DFS最简单。但是,如果我们有一个非常大的树并且想要在离原始节点太远时准备退出,DFS可以搜索节点的数千个祖先但是从不搜索所有节点的子节点。 严格来说,这取决于图表中数据的组织方式。 Source
答案 1 :(得分:0)
由于您仍然想知道它是如何工作的,因此这段代码可能会帮助您解决这个问题。这适用于图表,看看。它DFS每个节点,但在到达我们想要找到的节点时停止。
要获得最高值,只需将max值存储到int变量中,然后继续搜索并将每个节点的数据与int变量中的当前最大值进行比较。
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;
}