6.1 图的基本概念

图 (Graph)
G=(V,E),V 是顶点集,E 是边集。有向图的边称弧。

6.2 图的存储结构

邻接矩阵

用 n×n 矩阵 A 存储,A[i][j]=1 表示有 i→j 的边(无权)或权重(带权图)。无向图矩阵对称。

邻接表

为每个顶点建立单链表,存储其邻接点。

图的存储结构动画演示

对比邻接矩阵与邻接表两种存储方式。邻接矩阵用 n*n 数组适合稠密图, 邻接表用链表适合稀疏图。顶点 A-E, 边: A-B, A-C, B-D, B-E, C-D, D-E (无向图)。

图的存储: 邻接矩阵 vs 邻接表

交互式动画
速度 1x
步骤 0/0

6.3 图的遍历

从某顶点出发访问所有顶点且仅一次。

性能:邻接矩阵存储时 BFS/DFS 均为 O(n²);邻接表存储时均为 O(n+e)。

图遍历动画 BFS / DFS

交互式
速度 1x

6.4 最小生成树 MST

连通无向图的生成树包含全部顶点的极小连通子图。权值之和最小的生成树为最小生成树。

Prim 算法

从任一顶点开始,每次选与当前生成树距离最近的顶点加入。适合稠密图。O(n²)。

Kruskal 算法

将边按权值排序,依次选不构成回路的最小边。适合稀疏图。O(e log e)。

Prim 最小生成树动画

交互式
速度 1x

Kruskal 最小生成树动画

交互式
速度 1x

6.5 最短路径

Dijkstra 算法

求单源最短路径(非负权)。维护距离集合,每次选最近顶点扩展,松弛其邻接点。

Dijkstra 最短路径动画

交互式
速度 1x

Floyd 算法

求每对顶点间最短路径。动态规划,d[i][j]=min(d[i][j], d[i][k]+d[k][j])。时间 O(n³),可处理负权但不能有负回路。

Floyd 最短路径动画

交互式
速度 1x

6.6 拓扑排序与关键路径

AOV 网
顶点表示活动、边表示先后关系的有向无环图 (DAG)。

拓扑排序:选入度为 0 的顶点输出并删除,重复。若输出全部顶点则无环。时间 O(n+e)。

AOE 网 / 关键路径:顶点表示事件,边表示活动与权值(耗时)。关键路径是从源点到汇点的最长路径,决定工程最短工期。

拓扑排序动画

交互式
速度 1x

6.6.3 关键路径(AOE 网)

AOE 网:顶点表示事件,有向边表示活动,边权表示活动持续时间。关键路径:从源点到汇点路径长度最长的路径,决定最短工期。

AOE 网关键路径求解(Ve/Vl/e/l 全流程)

交互式
速度1x