Skip to content

第六章 图、遍历与最短路径


1. 为什么图是数据结构课程的分水岭

线性结构处理的是一对一顺序,树结构处理的是层次关系,而图结构处理的是最一般的连接关系。到了图这一章,数据结构课程真正进入“复杂关系建模”的阶段。

图可以表示:

  1. 城市与道路网络。
  2. 社交关系。
  3. 课程先修依赖。
  4. 互联网拓扑。
  5. 工作流和状态转移。

如果说树是“有约束的图”,那么图就是解除父子限制后的更一般模型。

2. 图的基本概念

图通常记作 G = (V, E)

  1. V 是顶点集合。
  2. E 是边集合。

图可以进一步分为:

  1. 无向图。
  2. 有向图。
  3. 带权图。
  4. 稀疏图与稠密图。

3. 图的两种核心存储方式

3.1 邻接矩阵

3.2 邻接表

4. Go 中的邻接表表示

5. 深度优先搜索 DFS

5.1 递归版 DFS

6. 广度优先搜索 BFS

6.1 BFS 为什么能求无权图最短路

7. 拓扑排序:处理依赖关系

7.1 Kahn 算法

8. 最短路径:从 BFS 到 Dijkstra

8.1 使用小根堆实现 Dijkstra

9. 并查集与图的连通性

10. 图这一章最容易犯的错误

11. 本章小结

12. 继续深入