BFS& DFS - 从哪个顶点开始?

时间:2013-04-01 18:37:08

标签: algorithm search

我已阅读有关BFS和DFS算法的页面和信息页面。他们没有说什么,首先选择哪个顶点?

例如,在此图像中,箭头是否表示您不能从c遍历到b,但可以从b遍历到c?

search network

朋友,非常感谢你的帮助。

3 个答案:

答案 0 :(得分:5)

可以使用任何源Vertex S 启动

Breadth-first_search Depth-first_search

要选择哪个顶点作为源顶点? - Depends upon your requirement

示例

  1. 如果你想找到从源S到所有的最短路径 使用BFS的其他顶点(对于所有边具有相同成本或未加权图的图)。然后选择 S 作为源顶点。

  2. 如果您想查找是否可以从顶点 S 访问顶点 K 或 不是,在这种情况下你也必须从源头开始你的BFS / DFS 顶点S。

  3. 如果您想要解决鼠标迷宫问题,其中老鼠从源 S 开始并且必须使用DFS到达目的地,那么您再次拥有从源 S 启动DFS算法。

  4. In some Cases, We are free to choose any vertex as a source vertex

    示例

    1. 在查找有向图的强连通分量(SCC)时, 我们通过选择任何顶点作为源顶点来启动DFS。

    2. 执行有向非循环图的拓扑排序时 使用DFS,我们可以自由选择任何顶点作为源顶点。

    3. 因此,首先选择哪个顶点并不固定,取决于问题的性质,我们用DFS和BFS解决。

答案 1 :(得分:1)

do the arrows mean you cannot traverse from c to b, but can traverse from b to c?

这是一张有向图,是的。

执行DFS时不需要指定要启动的节点,因为无论如何都会遍历所有节点。

DFS的过程是:

DFSmain(G):
     For v=1 to n: if v is not yet visited, do DFS(v).

DFS(v):
   mark v as visited. // entering node v
   for each unmarked out-neighbor w of v: do DFS(w).
   return. // exiting node v.

因此它最终将访问图中的每个节点。 BFS的类似理由。

答案 2 :(得分:1)

如果它不是有向图,那没关系。 您发布的图表是有向图,这意味着您所说的内容。你可以从a到b而不是从b到a。

关于在有向图中选择哪个节点,您选择的每个节点都会产生不同的结果。通常在这些情况下,如果给出了根节点,最好从根节点开始。