深度优先和广度优先

https://blog.csdn.net/weixin_40953222/article/details/80544928

广度优先搜索(Breadth First Search)

BFS可用于解决2类问题:

  • 从A出发是否存在到达B的路径;
  • 从A出发到达B的最短路径(这个应该叫最少步骤合理);

算法的基本思路
广度优先搜索类似于树的层次遍历过程。它需要借助一个队列来实现。如图所示,要想遍历从v0到v6的每一个顶点,我们可以设v0为第一层,v1、v2、v3为第二层,v4、v5为第三层,v6为第四层,再逐个遍历每一层的每个顶点。

具体过程如下:

  1.准备工作:创建一个visited数组,用来记录已被访问过的顶点;创建一个队列,用来存放每一层的顶点;初始化图G。

  2.从图中的v0开始访问,将的visited[v0]数组的值设置为true,同时将v0入队。

3.只要队列不空,则重复如下操作:

    (1)队头顶点u出队。

    (2)依次检查u的所有邻接顶点w,若visited[w]的值为false代表没有被访问,则访问w,并将visited[w]置为true,同时将w入队。

深度优先算法

算法的基本思路
深度优先搜索类似于树的先序遍历,具体过程如下:

准备工作:创建一个visited数组,用于记录所有被访问过的顶点。

1.从图中v0出发,访问v0。

2.找出v0的第一个未被访问的邻接点,访问该顶点。以该顶点为新顶点,重复此步骤,直至刚访问过的顶点没有未被访问的邻接点为止。

3.返回前一个访问过的仍有未被访问邻接点的顶点,继续访问该顶点的下一个未被访问领接点。

4.重复2,3步骤,直至所有顶点均被访问,搜索结束。

猜你喜欢

转载自www.cnblogs.com/my-mind/p/10142176.html