【问题标题】:Can you provide me any starting level ques in which BFS is used你能给我提供任何使用 BFS 的起始级别问题吗
【发布时间】:2014-12-07 19:19:29
【问题描述】:

我已经在 Google 和这里​​搜索过任何具有 BFS 实施的起始级别问题!实际上我知道 BFS 的算法,并且我创建了一个运行良好的 BFS 程序,但我没有使用 BFS,我的意思是我想要一个简单的入门级问题来尝试 BFS!我不希望源代码只是一个问题,以便我可以了解如何以及在何处使用 BFS,如果您也提供有关 DFS 的信息会更好! 是的,我是新来的,如果我犯了任何错误,请原谅我!

【问题讨论】:

  • This: stackoverflow.com/questions/20192445/…> 是理解 BFS 和 DFS 做什么的最直观的方式,以及它们之间的区别。但是,这只是一种意见,因此确实不属于 SO。为了获得额外的功劳,请在上述问题上尝试双向 BFS。

标签: implementation depth-first-search breadth-first-search


【解决方案1】:

它包含有关 BFS 和 DFS 的所有信息以及它们使用的原因?还有它们之间的关系。

http://www.ics.uci.edu/~eppstein/161/960215.html

BFS 动画

https://www.cs.usfca.edu/~galles/visualization/BFS.html

DFS 动画

https://www.cs.usfca.edu/~galles/visualization/DFS.html

希望对你有帮助!

【讨论】:

    【解决方案2】:

    当它说多个来源时,它指的是搜索的开始节点。您会注意到算法的参数是 BFS(G, s) 和 DFS(G)。这应该已经暗示 BFS 是单源的,而 DFS 不是,因为 DFS 不将任何初始节点作为参数。

    正如作者所指出的,这两者之间的主要区别在于 BFS 的结果始终是一棵树,而 DFS 可以是一片森林(树的集合)。这意味着,如果 BFS 从节点 s 运行,那么它将仅构建从 s 可到达的节点的树,但如果图中还有其他节点,则不会触及它们。然而,DFS 将继续搜索整个图,并构建所有这些连接组件的森林。正如他们解释的那样,这是大多数用例中每种算法的预期结果。

    正如作者所提到的,没有什么可以阻止使 DFS 成为单一来源的细微修改。事实上,这种改变很容易。我们简单地接受另一个参数 s,并且在例程 DFS(不是 DFS_VISIT)中而不是第 5-7 行遍历图中的所有节点,我们只需执行 DFS_VISIT(s)。

    同样,更改 BFS 可以使其与多个源一起运行。我在网上找到了一个实现:http://algs4.cs.princeton.edu/41undirected/BreadthFirstPaths.java.html 虽然这与另一个可能的实现略有不同,它会自动创建单独的树。意思是,该算法看起来像这样 BFS(G, S) (其中 S 是节点的集合),而您可以实现 BFS(G) 并自动生成单独的树。这是对排队的轻微修改,我将把它留作练习。

    正如作者所指出的,这些没有完成的原因是每种算法的主要用途都使它们变得有用。尽管考虑到这一点做得很好,但这是应该理解的重要一点。

    【讨论】:

    • 感谢您的回答! :)
    • 感谢您的宝贵时间! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多