【问题标题】:Is it possible to use depth first search to search every node?是否可以使用深度优先搜索来搜索每个节点?
【发布时间】:2013-10-20 03:47:08
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 只是...不要让它在到达目标时停止?我不明白这里有什么问题。您能否提供您正在寻找的代码和特定的输入/输出?
  • @Eric 我仍在努力弄清楚它是如何工作的,但在大多数情况下,我只是想知道是否有可能告诉它不要停止,因为每个示例我发现有一个特定的目标。你刚刚回答了我的问题,所以谢谢!

标签: java search tree depth-first-search


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    由于您仍然想知道它是如何工作的,这段代码可能会帮助您解决这个问题。这适用于图表,看看。它对每个节点进行 DFS,但在到达我们要查找的节点时停止。

    要获取最大值,只需将最大值存储到一个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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多