title: 图结构与遍历
tags:
- module
- data-structure-and-algorithm
- graph
- joplin
type: module
source_type: reconstructed
created: 2026-04-22
updated: 2026-04-22
---
图结构与遍历
[!abstract]
这一模块处理比树更一般的关系结构。图的难点不在定义,而在“如何存、如何遍历、如何理解顶点之间的复杂连接”。
模块结论
- [[图]] 适合表达多对多连接关系,是树结构的推广。
- 邻接矩阵和邻接表分别强调“查询方便”和“存边节省”。
- BFS 和 DFS 本质上是两种不同的扩展路径策略,分别依赖 [[队列]] 和 [[栈]] / 递归思维。
一、图的基本组成
为什么图比树更一般
- 树没有回路,且层次关系更明确。
- 图可以存在回路、交叉连接和更复杂的路径关系。
二、图的存储结构
邻接矩阵
- 用二维数组表示边关系。
- 优点是判断两点是否直接相连很直观。
- 缺点是在稀疏图里浪费空间。
邻接表
- 每个顶点维护自己的边表。
- 优点是适合稀疏图,按边存储更节省空间。
- 缺点是判断任意两点是否直接相连不如邻接矩阵直观。
三、广度优先搜索 BFS
- 按“距离起点一层一层扩展”的方式遍历。
- 核心辅助结构是队列。
- 常用于最短路径层次扩展、连通性检查等场景。
四、深度优先搜索 DFS
- 一条路尽量走到底,再回溯。
- 核心辅助结构是递归调用栈或显式栈。
- 常用于连通分量、拓扑处理前的遍历框架等场景。
五、比较 BFS 与 DFS
- BFS 更像层次推进。
- DFS 更像路径深入。
- 一个偏“广度扩散”,一个偏“深度探路”。
六、易错点
- 图遍历必须配合
visited 标记,否则容易在回路里重复访问。
- 邻接矩阵和邻接表不是谁绝对更好,要看图的稠密程度和操作需求。
- BFS / DFS 顺序会受到顶点存储次序和邻接点访问次序影响。
七、复习提问
- 邻接矩阵和邻接表分别适合什么图?
- BFS 为什么天然适合层次最短路问题?
- DFS 为什么常和递归写法联系在一起?
来源
- [[raw/Joplin/计算机专业基础/数据结构与算法/(C++)数据结构与算法/11.图.md]]
- [[raw/Joplin/计算机专业基础/数据结构与算法/(C)840数据结构与算法/7.图.md]]
相关页面
- [[数据结构与算法]]
- [[图]]
- [[栈]]
- [[队列]]