当前位置: 首页 > article >正文

12、算法

1、深度优先搜索(Depth-First Search,简称 DFS)和广度优先搜索(Breadth-First Search,简称 BFS)是图论和树结构遍历中常用的两种算法策略,它们的主要区别如下:
搜索方式
深度优先搜索:沿着一条路径尽可能深地探索下去,直到达到叶子节点或者无法继续深入为止,然后回溯到上一个节点,继续探索其他分支。
广度优先搜索:从起始节点开始,首先访问它的所有邻居节点,然后按照这些邻居节点的顺序,依次访问它们的邻居节点,以此类推,一层一层地向外扩展。
使用的数据结构
深度优先搜索:通常使用递归或者栈来实现。递归实现时,系统栈会记录函数调用的顺序和状态;手动使用栈实现时,将节点压入栈中,然后从栈中弹出节点进行访问,并将其未访问的邻居节点压入栈中。
广度优先搜索:一般使用队列来实现。先将起始节点放入队列,然后从队列中取出节点进行访问,把该节点的未访问邻居节点依次加入队列,直到队列为空。

代码示例:

#include <iostream>
#include <vector>

// 定义图的邻接表表示
using Graph = std::vector<std::vector<int>>;

// 递归实现深度优先搜索
void dfs(const Graph& graph, int node, std::vector<bool>& visited) {
    // 标记当前节点为已访问
    visited[node] = true;
    std::cout << node << " ";

    // 遍历当前节点的所有邻居节点
    for (int neighbor : graph[node]) {
        if (!visited[neighbor]) {
            // 递归访问未访问的邻居节点
            dfs(graph, neighbor, visited);
        }
    }
}

int main() {
    // 构建一个简单的图(邻接表表示)
    Graph graph = {
        {1, 2},  // 节点 0 的邻居节点为 1 和 2
        {0, 3},  // 节点 1 的邻居节点为 0 和 3
        {0, 3},  // 节点 2 的邻居节点为 0 和 3
        {1, 2}   // 节点 3 的邻居节点为 1 和 2
    };

    // 初始化访问标记数组
    std::vector<bool> visited(graph.size(), false);

    // 从节点 0 开始进行深度优先搜索
    std::cout << "深度优先搜索结果: ";
    dfs(graph, 0, visited);
    std::cout << std::endl;

    return 0;
}

http://www.kler.cn/a/566263.html

相关文章:

  • YOLOv5 + SE注意力机制:提升目标检测性能的实践
  • C语言32个关键字
  • Python代码片段-Excel导入到MongoDB
  • 六、索引优化实战案例
  • vue cli 与 vite的区别
  • next.js-学习5
  • 【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发-第5章 UART接口运作机制
  • 《算法宝典:全类型题目索引》
  • torch中维度操作总结(repeat,squeeze,unsqueeze,flatten,transpose)
  • 双足肌肉骨骼机器人 VS 传统钢铁结构机器人:科技新趋势与跨界创新
  • 计算机毕设-基于springboot的软件技术交流平台的设计与实现(附源码+lw+ppt+开题报告)
  • lambda表达式,函数式接口,方法引用,Stream流
  • PCEP介绍
  • Field 对象的使用
  • 基于结构光扫描的汽车前纵梁焊接总成及冲压件自动化三维检测系统研发与应用
  • Logic-RL: 小模型也能强推理,通过基于规则的强化学习提升大语言模型结构化推理能力
  • CentOS上安装Docker Compose(2)
  • Ubuntu 创建新用户及设置权限
  • 页面加载速度,如何优化提升?
  • C++ Primer 容器适配器