Skip to content

六、图

本章导览

共 6 个小节:图的基本概念、图的存储表示、图的基本操作、图的遍历、图的应用、图的应用

六、图 · 章节总览

本章重点

  • 图 G=(V,E),多对多网状关系
  • 存储:邻接矩阵(稠密)/ 邻接表(稀疏);遍历:BFS(队列)/ DFS(栈)
  • 最短路径 Dijkstra/Floyd;最小生成树 Prim/Kruskal;拓扑排序 / 关键路径

图的基本概念

图的基本概念

关键点

  • 顶点 + 边,分有向 / 无向;(有向分入度、出度)、连通 / 强连通
  • 邻接矩阵判相邻 O(1)、空间 O(n²);邻接表省空间 O(n+e)

图的存储表示

图的存储表示

关键点

  • 邻接矩阵:判相邻 / 取边权 O(1),宜稠密图
  • 邻接表:空间 O(n+e),宜稀疏图
  • 十字链表(有向)、邻接多重表(无向)

邻接矩阵

邻接矩阵

关键点

空间复杂度:$O(|V|^2)$——只和顶点数相关,和实际的边数无关,适合用于存储稠密图。 无向图的邻接矩阵是对称矩阵,可以压缩存储(只存储上三角区/下三角区)。

邻接表

邻接表

十字链表

十字链表

邻接多重表

邻接多重表

图的基本操作

图的基本操作

关键点

  • 同一操作在不同存储下代价不同
  • 口诀:问「是否相邻 / 取边权」用邻接矩阵,问「遍历邻居」用邻接表

图的遍历

图的遍历

关键点

  • BFS:逐层扩展、用队列,求无权图最短路
  • DFS:钻到底回溯、用栈 / 递归
  • 一次遍历的可达顶点 = 一个连通分量

广度优先算法(BFS)

广度优先算法(BFS)

深度优先算法(DFS)

深度优先算法(DFS)

图的遍历与图的连通

图的遍历与图的连通

图的应用

图的应用

关键点

  • 最小生成树:Prim(顶点扩展,宜稠密)、Kruskal(选边 + 并查集,宜稀疏)
  • 最短路径:Dijkstra(无负权)、Floyd(多源 O(n³))

图的应用

图的应用

关键点

  • 拓扑排序(AOV):反复删入度为 0 的顶点,判能否进行
  • 关键路径(AOE):最长路径定工期
  • 口诀:拓扑看顺序,关键看工期

最小生成树

最小生成树

关键点

(1)Prim 算法(普利姆) (2)Kruskal 算法(克鲁斯卡尔) Prim 算法 V.S. Kruskal 算法

最短路径问题

最短路径问题

关键点

单源最短路径——BFS 算法(无权图) 单源最短路径——Dijkstra 算法(带权图、无权图) 各顶点间的最短距离——Floyd 算法(带权图、无权图)

有向无环图描述表达式

有向无环图描述表达式

拓扑排序

拓扑排序

关键路径

关键路径