全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++如何实现图的广度优先搜索(BFS)?(代码示例)

C++中BFS使用队列按层遍历,以邻接表存储图,用visited数组防重访;对非连通图需遍历所有节点启动多次BFS;可扩展用于无权图最短路径、二分图判定等。

用C++实现图的广度优先搜索(BFS),核心是借助队列(queue)按层扩展访问节点,并用数组或集合标记已访问节点,避免重复入队。

使用邻接表存储图

邻接表适合稀疏图,用 vector> 表示:下标为起点,内部 vector 存所有邻接点。

例如:边 (0→1), (0→2), (1→3),对应 graph[0] = {1,2}graph[1] = {3}

标准 BFS 实现(无权图,从起点开始遍历)

以下代码输出 BFS 遍历顺序(也可改造成求最短距离、连通分量等):

#include 
#include 
#include 
#include 

using namespace std;

void bfs(const vector>& graph, int start) {
    int n = graph.size();
    vector visited(n, false);
    queue q;

    visited[start] = true;
    q.push(start);

    while (!q.empty()) {
        int u = q.front();
        q.pop();
        cout << u << " ";  // 访问当前节点

        // 遍历所有邻接点
        for (int v : graph[u]) {
            if (!visited[v]) {
                visited[v] = true;
                q.push(v);
            }
        }
    }
    cout << endl;
}

// 示例用法
int main() {
    // 构建 4 个节点的有向图:0→1, 0→2, 1→3, 2→3
    vector> graph(4);
    graph[0] = {1, 2};
    graph[1] = {3};
    graph[2] = {3};
    // graph[3] 为空

    bfs(graph, 0); // 输出:0 1 2 3
    return 0;
}

扩展:支持无向图与多连通分量

若图不连通,需对每个未访问节点启动一次 BFS:

  • 外层加循环遍历所有节点 i ∈ [0, n)
  • 每次遇到 !visited[i] 就调用一次 BFS,可视为发现一个新连通分量
  • 无向图建图时,边 u-v 要双向添加:graph[u].push_back(v); graph[v].push_back(u);

常见变体用途

  • 单源最短路径(无权图):用 vector dist(n, -1) 记录距离,起始点 dist[start] = 0,每次入队时设 dist[v] = dist[u] + 1
  • 判断二分图:用颜色数组(如 0/1),BFS 过程中检查邻接点是否冲突
  • 层序遍历控制:用额外变量记录当前层节点数(如先记 int levelSize = q.size()),每轮处理完一层再继续

基本上就这些。BFS 关键在于“先进先出”和“即时标记”,别漏判 visited 就不会死循环。


# go  # ai  # c++  # ios  # stream  # int  # 循环  # 遍历  # 最短  # 就不  # 也可  # 关键在于  # 会死  # 为空  # 过程中  # 需对  # 起始点 


相关文章: 北京制作网站的公司,北京铁路集团官方网站?  盐城做公司网站,江苏电子版退休证办理流程?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  北京专业网站制作设计师招聘,北京白云观官方网站?  外贸公司网站制作哪家好,maersk船公司官网?  小型网站制作HTML,*游戏网站怎么搭建?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  建站之星如何优化SEO以实现高效排名?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何在腾讯云服务器上快速搭建个人网站?  如何在自有机房高效搭建专业网站?  ,制作一个手机app网站要多少钱?  如何在建站之星网店版论坛获取技术支持?  如何配置WinSCP新建站点的密钥验证步骤?  代刷网站制作软件,别人代刷火车票靠谱吗?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  寿县云建站:智能SEO优化与多行业模板快速上线指南  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何通过万网虚拟主机快速搭建网站?  网站制作模板下载什么软件,ppt模板免费下载网站?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  微信小程序 input输入框控件详解及实例(多种示例)  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  制作宣传网站的软件,小红书可以宣传网站吗?  如何挑选高效建站主机与优质域名?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  建站VPS推荐:2025年高性能服务器配置指南  定制建站价位费用解析与套餐推荐全攻略  Thinkphp 中 distinct 的用法解析  建站之星图片链接生成指南:自助建站与智能设计教程  济南企业网站制作公司,济南社保单位网上缴费步骤?  公司门户网站制作流程,华为官网怎么做?  如何用花生壳三步快速搭建专属网站?  高端云建站费用究竟需要多少预算?  如何通过商城免费建站系统源码自定义网站主题?  宝塔新建站点为何无法访问?如何排查?  建站之星CMS五站合一模板配置与SEO优化指南  网站制作公司排行榜,抖音怎样做个人官方网站  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  智能起名网站制作软件有哪些,制作logo的软件?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何在景安服务器上快速搭建个人网站?  Python文件管理规范_工程实践说明【指导】  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  如何选择适合PHP云建站的开源框架? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。