深度优先和广度优先
Posted my-mind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度优先和广度优先相关的知识,希望对你有一定的参考价值。
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步骤,直至所有顶点均被访问,搜索结束。
以上是关于深度优先和广度优先的主要内容,如果未能解决你的问题,请参考以下文章
Python算法-深度优先搜索&广度优先搜索(DFS&BFS)
数据结构与算法图遍历算法 ( 深度优先搜索 DFS | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )