c++深度优先和广度优先

深度优先搜索(Depth First Search,DFS)和广度优先搜索(Breadth First Search,BFS)都是常用的图遍历算法。它们的目的是从图的某个起始节点开始,访问图中所有节点,以便找到特定节点、计算节点之间的距离等。

深度优先搜索(DFS): 深度优先搜索是一种用于遍历或搜索树或图的算法。它从起始节点开始,沿着一条路径尽可能深入地访问节点,直到达到没有未访问邻节点为止,然后返回并选择下一条未访问的路径。这个过程递归进行,直到遍历完整个图。

在DFS中,使用栈作为辅助数据结构来存储待访问节点。具体步骤如下:

  1. 创建一个栈,并将起始节点入栈。
  2. 当栈不为空时,从栈中弹出一个节点,并访问它。
  3. 标记该节点为已访问。
  4. 将该节点的所有未访问邻节点入栈。
  5. 重复步骤2-4,直到栈为空。

广度优先搜索(BFS): 广度优先搜索是一种用于遍历或搜索树或图的算法。它从起始节点开始,首先访问所有与起始节点直接相连的节点,然后再依次访问这些节点的相连节点,以此类推,直到访问完所有节点。

在BFS中,使用队列作为辅助数据结构来存储待访问节点。具体步骤如下:

  1. 创建一个队列,并将起始节点入队。
  2. 当队列不为空时,从队列中取出一个节点,并访问它。
  3. 标记该节点为已访问。
  4. 将该节点的所有未访问邻节点入队。
  5. 重复步骤2-4,直到队列为空。

两种算法的区别在于遍历节点的顺序不同。在深度优先搜索中,先完全探索一个节点的所有邻节点,然后再继续下一个节点的探索。而在广度优先搜索中,先访问与起始节点直接相连的节点,再访问与这些节点相连的节点,依次层层遍历。

在实际应用中,深度优先搜索适用于解决路径问题,如找到两个节点之间的最短路径、查找图的连通分量等。广度优先搜索适用于解决最短路径问题、查找社交网络中两个人之间的距离等。

相关推荐
菜鸟233号12 分钟前
力扣213 打家劫舍II java实现
java·数据结构·算法·leetcode
十五年专注C++开发19 分钟前
CMake基础: 在release模式下生成调试信息的方法
linux·c++·windows·cmake·跨平台构建
狐5724 分钟前
2026-01-18-LeetCode刷题笔记-1895-最大的幻方
笔记·算法·leetcode
点云SLAM42 分钟前
C++(C++17/20)最佳工厂写法和SLAM应用综合示例
开发语言·c++·设计模式·c++实战·注册工厂模式·c++大工程系统
Q741_14743 分钟前
C++ 队列 宽度优先搜索 BFS 力扣 662. 二叉树最大宽度 每日一题
c++·算法·leetcode·bfs·宽度优先
Pluchon1 小时前
硅基计划4.0 算法 动态规划进阶
java·数据结构·算法·动态规划
csdn_aspnet1 小时前
C++跨平台开发:工程难题与解决方案深度解析
c++
余衫马1 小时前
在Win10下编译 Poppler
c++·windows·qt·pdf·poppler
王老师青少年编程1 小时前
2024年3月GESP真题及题解(C++七级): 俄罗斯方块
c++·题解·真题·gesp·csp·俄罗斯方块·七级
wzf@robotics_notes1 小时前
振动控制提升 3D 打印机器性能
嵌入式硬件·算法·机器人