【数据结构】工程化实现BFS

发布时间:2026/9/2 5:05:25

【数据结构】工程化实现BFS
这里是邻接表邻接图实现的完整BFS代码用动态链表存储边效率更高适合稀疏图。c#include stdio.h #include stdlib.h #include stdbool.h #define MAX_VERTICES 100 // 邻接表节点边 typedef struct EdgeNode { int vertex; // 邻接顶点编号 struct EdgeNode* next; } EdgeNode; // 顶点结构头节点 typedef struct { EdgeNode* head; // 指向第一条边 } Vertex; Vertex graph[MAX_VERTICES]; // 图数组 bool visited[MAX_VERTICES]; // 访问标记 // ---------- 队列数组模拟---------- int queue[MAX_VERTICES]; int front 0, rear 0; void enqueue(int v) { queue[rear] v; } int dequeue() { return queue[front]; } bool isEmpty() { return front rear; } // ---------- 添加边无向图---------- void addEdge(int u, int v) { // 添加 u - v EdgeNode* newNode (EdgeNode*)malloc(sizeof(EdgeNode)); newNode-vertex v; newNode-next graph[u].head; graph[u].head newNode; // 添加 v - u无向 newNode (EdgeNode*)malloc(sizeof(EdgeNode)); newNode-vertex u; newNode-next graph[v].head; graph[v].head newNode; } // ---------- BFS 遍历 ---------- void bfs(int start) { enqueue(start); visited[start] true; while (!isEmpty()) { int cur dequeue(); printf(%d , cur); // 遍历 cur 的所有邻接点 EdgeNode* p graph[cur].head; while (p ! NULL) { int neighbor p-vertex; if (!visited[neighbor]) { enqueue(neighbor); visited[neighbor] true; } p p-next; } } } // ---------- 主函数 ---------- int main() { int n, edges, u, v, start; printf(请输入顶点数: ); scanf(%d, n); printf(请输入边数: ); scanf(%d, edges); // 初始化图头节点置空访问标记false for (int i 0; i n; i) { graph[i].head NULL; visited[i] false; } printf(请输入 %d 条边 (u v):\n, edges); for (int i 0; i edges; i) { scanf(%d %d, u, v); addEdge(u, v); } printf(请输入起始顶点: ); scanf(%d, start); printf(BFS遍历结果: ); bfs(start); // 处理不连通分量 for (int i 0; i n; i) { if (!visited[i]) { printf(\n检测到不连通分量从 %d 继续: , i); // 重置队列因为 front/rear 已到末尾需重置 front rear 0; bfs(i); } } printf(\n); // 释放链表内存可选为简洁略 return 0; }运行示例text请输入顶点数: 5 请输入边数: 4 请输入 4 条边 (u v): 0 1 0 2 1 3 1 4 请输入起始顶点: 0 BFS遍历结果: 0 1 2 3 4关键点邻接表每个顶点维护一个链表存储所有相邻顶点。添加边无向图需双向插入若为有向图只插入 u→v。队列数组模拟注意遍历不连通分量时需重置front和rear。复杂度时间 O(VE)空间 O(VE)。如果需要带权图或记录层数可以在边节点中增加weight字段或使用distance数组。

相关新闻

从零开始系统学习Java开发的路径与心得

从零开始系统学习Java开发的路径与心得

2026/9/2 5:05:25

你打开IDE,新建一个空项目,屏幕上只有一行孤独的main方法。这个瞬间,无数人以为Java就是从这里开始的,但真正的起点远在此之前。Java不是一门语言,而是一整套关于约束与规模的生存法则。 从零开始系统学习Java&#xf…

基于Flask的智能图书数据分析系统:从爬虫到推荐的全栈实践

基于Flask的智能图书数据分析系统:从爬虫到推荐的全栈实践

2026/9/2 5:05:25

你有没有遇到过这样的情况:想找一本好书,面对海量的图书数据却无从下手?或者,作为一个开发者,你手头有一堆图书销售、评论数据,却不知道如何把它们变成有价值的洞察?又或者,你正在为…

基于源码的YOLOv8模型剪枝实战:从原理到部署加速

基于源码的YOLOv8模型剪枝实战:从原理到部署加速

2026/9/2 4:55:25

简介:一套面向YOLOv8目标检测模型的剪枝优化源码,面向需要轻量化部署、在资源受限设备上实现实时检测的开发者与研究者。资源压缩包共41个文件、体积仅1.47MB,包含20个pyc预编译文件、10个yaml网络结构配置、9个py脚本、1个md说明文档及1个嵌…

Python轻量级运维发布系统:基于Flask+Celery的自动化部署实践

Python轻量级运维发布系统:基于Flask+Celery的自动化部署实践

2026/9/2 6:05:28

简介:这是一套基于Django与Bootstrap开发的Python运维管理发布系统,面向中高级运维工程师及DevOps实践者,解决多环境代码发布、批量部署、操作审计等核心运维痛点。系统已实现项目管理、Git/SVN PHP工程发布与回滚、SaltStack集成的批量应用部…

四角色同屏动画制作全流程:Blender睡觉大作战复刻指南

四角色同屏动画制作全流程:Blender睡觉大作战复刻指南

2026/9/2 6:05:28

这一集最大的看点不是单个角色有多精细,而是四个Sprunki小鬼在同一张床上睡觉、抢枕头、翻来翻去,最后乱成一团。我第一次看到这个分镜时,第一反应是:这比打斗戏还难拍。打斗戏可以把两个角色错开入画,睡觉大作战要四个…

Python机器人迷宫探索:从DFS算法到硬件闭环控制的完整实现

Python机器人迷宫探索:从DFS算法到硬件闭环控制的完整实现

2026/9/2 6:05:28

简介:本资源是一份面向高校人工智能与机器人课程设计的Python实践项目,聚焦迷宫路径规划核心问题,完整实现基于基础搜索算法(如DFS/BFS)与深度强化学习(Deep Q-Network)的双方案机器人自动寻路系…

写论文少花冤枉钱!这些高阶功能可以免费使用

写论文少花冤枉钱!这些高阶功能可以免费使用

2026/9/2 6:05:28

写论文很多同学都在花冤枉钱,熬夜构思内容,还要付费 AI 写作、按字数买降重、一次次花钱查重、花钱去除 AI 痕迹。市面上绝大多数工具,基础体验免费,真正刚需高阶功能全部收费。今天给大家分享笔乐颂 AI,多项核心功能免…

STM32F103C8T6+SYN6288离线语音播报器实战:从接线到代码完整解析

STM32F103C8T6+SYN6288离线语音播报器实战:从接线到代码完整解析

2026/9/2 6:05:28

简介:基于STM32C8T6与SYN6288语音合成模块的嵌入式播报项目,面向物联网、智能家居及安全监控方向的开发者,演示如何通过传感器采集环境数据并驱动语音芯片完成人声预警。方案支持更换不同传感器实现多条件检测,具备自动识别播报与…

ZEVMS冒险岛V079服务端搭建实战:从源码解析到一键端排错

ZEVMS冒险岛V079服务端搭建实战:从源码解析到一键端排错

2026/9/2 5:55:27

简介:ZEVMS冒险岛V079服务端及配套源码是面向游戏服务端学习者与冒险岛私服研究者的完整资源包。资源包含21514个文件,以XML配置、JavaScript脚本、Jar与DLL库文件为主,兼顾EXE可执行程序与SO动态库,整体压缩包约328.64MB&#xf…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/1 1:53:39

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/1 9:55:14

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/1 23:49:08

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

2026/9/2 0:04:59

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

2026/9/2 0:04:59

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

2026/9/2 0:04:59

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

远程协作的工作台整理

远程协作的工作台整理

2026/9/1 0:03:36

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/1 0:03:36

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/2 2:45:06

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…