为什么BFS获得最短路径?

时间:2015-10-29 19:07:13

标签: graph-algorithm shortest-path breadth-first-search depth-first-search

  

BFS具有非常有用的属性,即如果a中的所有边缘   图表是未加权(或相同的权重),然后是第一次节点   被访问的是从源节点到该节点的最短路径。

如何验证此属性?为什么不在DFS这种财产的情况下持有?

2 个答案:

答案 0 :(得分:1)

要回答您的问题,首先应了解BFS和DFS在一般意义上的工作原理。

考虑二元搜索树,这只是一个非常简单的图,如下所示:

        *a
       /  \
    *b     *c
   /  \   /  \
  *d  *e *f   *g

广度优先搜索(BFS) ,顾名思义,将首先探索距离源节点最近的节点。假设您从节点* a开始搜索,BFS算法将首先探索* b,跟随* c,然后* d,* e,* f,* g。

另一方面,

深度优先搜索(DFS) 首先深入。从源节点* a,您将展示* b,然后是* d,* e(直到您到达结尾)。

因此,声明:

  

...第一次访问节点是从源节点到该节点的最短路径

假设在BFS运行时,您访问了节点* b。这确实是从源节点到节点* b的最短路径,因为BFS具有始终首先探索最靠近源节点的节点的属性。

类似的概念可以应用于更复杂的图形。它们都是一样的。

希望这有帮助!干杯!

答案 1 :(得分:0)

  * A
 /  \
|    \
|     \
* B    \
 \      \
  \      \
   \      \
    * D    \
     \      \
      \______* C  

看看这个简单的图表。 例如,如果您从A开始执行DFS,并且访问的第一个邻居将是顶点B,那么第一次访问顶点C将通过D,因此您将获得长度为3的路径。

所以,当A寻找他的另一个邻居(C)他不会去拜访它时,A-B-D-C肯定不是从A到C的最短路径。