news 2026/5/15 15:28:06

【算法】小白也能懂 · 第 9 节:图的表示与遍历(BFS、DFS)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【算法】小白也能懂 · 第 9 节:图的表示与遍历(BFS、DFS)

前面我们学习了数组、链表、栈、队列、哈希表等数据结构,它们有一个共同点:数据之间的关系都是「线性」的(一个接一个)或者「层级」的(树形结构)。但现实世界中很多关系不是这么简单的——比如社交网络中,每个人都可以和任意多的人成为好友;城市之间,多条公路相互交错。这种「多对多」的关系,用(Graph)来表达最为自然。

1. 什么是图

图(Graph)由两部分组成:

  • 顶点(Vertex):也叫节点,表示实体。比如社交网络中的每个人、地图上的每个城市。
  • (Edge):表示两个顶点之间的关系。比如两个人是好友、两个城市之间有公路相连。

用数学语言来说,一个图 G = (V, E),其中 V 是顶点的集合,E 是边的集合。

1.1 图的分类

根据边的性质,图分为两类:

无向图:边没有方向。如果 A 和 B 之间有边,表示 A 到 B 和 B 到 A 都是可达的。社交网络中的「好友关系」就是无向图——你是我的好友,我也是你的好友。

有向图:边有方向。从 A 到 B 的边不代表从 B 到 A 也能走。微博的「关注」关系就是有向图——你关注了某人,不代表某人也关注了你。

根据边是否带有权重,还可以分为带权图(每条边有一个数值,比如公路的距离)和无权图(边只有连接关系,没有额外信息)。

2. 图的存储方式

在程序中,图有两种最常见的存储方式:邻接矩阵和邻接表。

2.1 邻接矩阵

邻接矩阵是一个二维数组matrix[n][n],其中n是顶点的数量。如果顶点 i 和顶点 j 之间有边,则matrix[i][j] = 1(无权图)或matrix[i][j] = 权重(带权图)。

假设有一个无向图,4 个顶点(0、1、2、3),边为 (0,1)、(0,2)、(1,2)、(2,3):

0 --- 1 | / | / 2 --- 3

对应的邻接矩阵:

0 1 2 3 0 [ 0, 1, 1, 0 ] 1 [ 1, 0, 1, 0 ] 2 [ 1, 1, 0, 1 ] 3 [ 0, 0, 1, 0 ]

无向图的邻接矩阵沿对角线对称——(0,1)有边意味着matrix[0][1]matrix[1][0]都是 1。

在 C++ 中实现:

constintN=4;intmatrix[N][N]={};// 添加边 (u, v)voidaddEdge(intu,intv){matrix[u][v]=1;matrix[v][u]=1;// 无向图,两边都要标记}

邻接矩阵的优点是查询两点之间是否有边的时间复杂度为 O(1),实现简单。缺点是空间复杂度为 O(n²),当顶点很多但边很少(稀疏图)时,会浪费大量空间。

2.2 邻接表

邻接表的思路是:每个顶点维护一个列表,记录它连接的所有顶点。

还是上面的例子,邻接表表示为:

0 → [1, 2] 1 → [0, 2] 2 → [0, 1, 3] 3 → [2]

在 C++ 中,通常用vector数组来实现:

constintN=4;vector<int>adj[N];// 添加边 (u, v)voidaddEdge(
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 15:27:05

Armv8/v9虚拟化扩展:HCRX_EL2寄存器详解与应用

1. HCRX_EL2寄存器概述 HCRX_EL2是Armv8/v9架构中引入的扩展Hypervisor配置寄存器&#xff0c;作为HCR_EL2的补充控制寄存器。我在实际虚拟化开发中发现&#xff0c;随着Arm架构虚拟化功能的不断丰富&#xff0c;原有的HCR_EL2寄存器位域已经无法满足日益增长的配置需求&#x…

作者头像 李华
网站建设 2026/5/15 15:27:05

聚焦智驾普惠,魔视智能高阶智驾商业化提速

在自动驾驶行业喧嚣的今天&#xff0c;一个有些尴尬的真相正浮出水面&#xff1a;当越来越多车企热衷于用“L2.9”、“准L3”等概念包装自己的产品时&#xff0c;真正的L3/L4高阶智驾却依然困在“demo易做&#xff0c;量产难寻”的怪圈里。技术路线从多传感器融合卷向端到端大模…

作者头像 李华
网站建设 2026/5/15 15:11:13

联想M920x黑苹果终极指南:如何在商用主机上打造完美macOS工作站

联想M920x黑苹果终极指南&#xff1a;如何在商用主机上打造完美macOS工作站 【免费下载链接】M920x-Hackintosh-EFI Hackintosh Opencore EFIs for M920x 项目地址: https://gitcode.com/gh_mirrors/m9/M920x-Hackintosh-EFI 你是否曾经想过在联想M920x商用主机上运行ma…

作者头像 李华