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

时间:2013-10-20 03:47:09

标签: java search tree depth-first-search

我正在研究深度优先搜索,我发现的例子正在寻找一个特定的答案,让我们说数字10。

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

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

然后它会搜索下一个分支并获取一个值并将其存储到一个可能名为Value的变量中。然后,它会将highestValue与Value和if (Value > highestValue) highestValue = Value进行比较。

它将重复该过程,直到它完成每个可能的场景运行。有任何想法吗?我应该提一下,我是用Java写的。

2 个答案:

答案 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;
}