目录
哈喽
各位好
晚上从沙发上起来,端坐在电脑前
我大抵是无聊了
思前想后,我还是写下了 c++深度优先搜索(DFS)详解
这是很容易的,也有暴力的影子
俗话说:暴搜挂着机,打表出省一。偏分过样例,暴力出奇迹。
dfs乃何物?
DFS(Depth First Search) ,即 深度优先搜索 ,是一种遍历图的方式。
比如这张图(用鼠标写数字有点丑)

我们要找到4这个值
假设从1开始找
1没找到
再找2,2也没找到,
找3,3又没找到
发现已经走到头了
再一步一步回溯到1,走另外一条路,找到了4
总结一下,dfs会在搜索到新点时优先访问以改点为起点的子节点,并在所有子节点访问完成后回溯,可以看出,dfs和递归殊途同归。
相反地,有BFS(Breath First Search)广度优先搜索,用bfs访问上例时访问顺序为:1,2,4,3。程序会访问完当前节点的所有子节点,一层一层向下搜。
练练英语:
DFS will preferentially visit the child nodes starting from the change point when searching for a new point, and backtrack after all the child nodes are accessed. It can be seen that DFS and recursion come to the same destination.
In contrast, Breath First Search (BFS) is the breadth-first Search. When BFS is used to access the above example, the access sequence is 1,2,4,3. The program accesses all the children of the current node, level by level down.
懂了吗?就这么简单
DFS算法过程:
1、任选一顶点作始点 v ,访问该顶点
2、沿深度方向,依次遍历 v 的未访问邻接点——直到本次遍历结束
3、一次遍历完时,若有未访问顶点:任选一个未访问顶点作起始点,GOTO第二步

本文详细介绍了深度优先搜索(DFS)的概念、算法过程,并提供了C++实现的代码示例,包括递归框架和解决实际问题的案例,如数字序列构造和n-皇后问题。此外,还展示了利用DFS进行寻路的示例代码,通过栈存储路径,动态更新地图状态,找到出口。

最低0.47元/天 解锁文章
2万+





