← 首页·文章列表

数据结构八 图

一、图的基本概念

1. 图的定义

2. 度、入度、出度

3. 图的逻辑关系


二、图的存储方式

1. 邻接矩阵

2. 邻接表

3. 存储方式对遍历序列的影响


三、拓扑排序

1. 基本概念

2. 拓扑排序算法(通用方法)

  1. 计算每个顶点的入度。
  2. 选择入度为0的顶点输出,并将其从图中删除(其邻接点入度减1)。
  3. 重复第2步,直到所有顶点输出或不存在入度为0的顶点(有环)。

算法复杂度:

3. 拓扑序列举例

给定有向图边集:E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>,<V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>}

通用技巧:逐个检验选项中各弧的先后关系是否满足。


四、最短路径

1. 单源最短路径——Dijkstra算法

2. 每对顶点最短路径——Floyd算法

3. 权值相等时的单源最短路径


五、AOE网与关键路径

1. 基本概念

2. 关键路径的相关概念

3. 关键路径的性质与易错点


六、知识点速记卡

知识点 要点
无向图度数与边 所有顶点度数之和 = 2×边数
有向图入度与出度 入度总和 = 出度总和 = 弧数
拓扑排序时间复杂度 邻接表 O(n+e),邻接矩阵 O(n²)
Dijkstra算法 单源最短路径,权值非负,O(n²)
Floyd算法 多源最短路径,可负权但无负环,O(n³)
权值相等最短路径 BFS即可解
关键路径 源点到汇点最长路径,基于拓扑排序
关键活动提前 单个关键活动提前不一定缩短工期;所有关键活动提前才一定提前
事件最早时间 等于以该事件为尾的活动最早开始时间
事件最迟时间 不等于以该事件为尾的活动最迟开始时间(这是错误说法)

七、常见解题方法

1. 拓扑序列验证法

2. 关键路径计算法

3. Dijkstra正确性条件

4. Floyd算法可负权