你能告诉我任何使用BFS的起始问题吗?

时间:2014-12-07 19:19:29

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

我在谷歌搜索过这里也有关于实施BFS的任何起始级问题!实际上我知道BFS的算法,我已经创建了一个BFS程序,它运行正常,但我没有得到BFS的使用,我的意思是我想要一个简单的起始级别问题来尝试BFS!我不希望源代码只是一个问题,这样我就可以知道如何以及在哪里使用BFS,如果你提供有关DFS的信息会更好! 是的,我是新来的,如果我有任何错误原谅我!

2 个答案:

答案 0 :(得分: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

我希望它可以帮到你!

答案 1 :(得分:0)

当它说多个来源时,它指的是搜索的起始节点。您会注意到算法的参数是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)并自动生成单独的树。这是对排队的一点修改,我将其留作练习。

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