小工具知识网

当前位置: 首页 > 行业知识 > 深度优先搜索(DFS)和广度优先搜索(BFS)两种算法c++

行业知识

深度优先搜索(DFS)和广度优先搜索(BFS)两种算法c++

2026-11-05 07:47:52 来源:互联网转载

1、BFS和DFS介绍

���度优先搜索(DFS)和广度优先搜索(BFS)是一种用于遍历或搜索树图的一种算法,在这个过程中保证图或数的每个结点被访问且仅被访问一次,再按照每个结点访问的顺序不同分为深搜和广搜。

本文只讨论这两种算法在搜索方面的应用!

1.1深度优先搜索算法

深度优先搜索(Depth-First-Search,DFS)它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。

这个算法可以用递归实现也可以用栈实现。使用递归很容易理解而且代码量较少,当然它也有缺点,就是对规模较大的图或数使用递归思路会导致栈溢出。目前阶段我都会使用递归去实现深搜。

1.2广度优先搜索算法

广度优先搜索(Breadth-First-Search,BFS)这个算法很好理解,直观的解释它就像一个炸弹爆炸时那种层层推进的搜索方式,是要当前结点周围的结点符合搜索条件,那么就同步地将当前结点周围的结点作为源节点继续宽搜,直到找到目标结点为止。

这个算法独特的搜索策略就决定了它的最终搜索结果一定是最优解!所以目前只要我看到有最优解要求时,我会毫不犹豫的选择BFS。

1、BFS和DFS的经典应用

 起初我认为DFS只有在特定的情况的情况才有最优解,但是if语句确实万能,通过对这个语句的灵活运用,DFS依旧可以实现最优解(虽然意义不大。因为BFS的实现更简单,而且时间复杂度更低!)。

1.1迷宫问题应用

1.1.1原始版

问题描述:现给出一个30*50的迷宫矩阵(见代码),其中标记1为障碍物,0为可以通行的地方。迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。请找出一种通过迷宫的方式,其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。

请注意在字典序中 D

上一篇:方舟服务器怎么删除角色?

下一篇:解决 adbd cannot run as root in production builds 问题