数据结构 第6章 图
6.1 图的基本概念(2 4 11)
6.2 图的存储及基本操作(1 12 13 15 16)
6.3 图的遍历(2 3 5 16)
6.4 图的应用(1 4 5 6 8 9 10 11 13 14 19 24 25 28 33 34)
6.1 图的基本概念
- T2
一个有个顶点和n条边的图,一定是有环的。 - T4
无向图的连通分量 = 极大连通子图
图的遍历:每个结点只访问一次;若为非连通图,可能某顶点出不能完全访问。 - T6
完全无向图中,n个顶点,边=n(n-1)/2 - T11
极大连通子图:连通分量
极小连通分量:图的生成树
6.2 图的存储及基本操作
- T1
图的拓扑序列 / DAG图:一个有向图中不存在环
(对应的领接矩阵对角线以下元素全为0,图一定没有环,即图的拓扑序列一定存在,但拓扑序列不唯一)
拓扑排序的算法:
(1)从有向图中选择一个没有前驱(即入度为0)的顶点并输出。
(2)从网中删除该顶点,并删除从该顶点出发的全部的有向边。
(3)重复上述步骤,直到剩余网中不再存在没有前驱的顶点为止。 - T12
无向图没有自己指向自己的边
无向图的邻接表最多有n(n-1)个边表结点,每条边存储两边 - T15 T16
领接多重表——无向图(顶点结点:data firstedge;弧结点…)
十字链表——有向图:(顶点结点:data firstin firstout;弧结点…)
领接矩阵、领接表——无向图、有向图
6.3 图的遍历
- T1
广度优先可以解决各边权值相等的单源最短路径问题 - T2
在DFSTraverse函数中调用DFS函数的次数 = 连通分量数 - T3
DFS和BFS的时间复杂度以及空间复杂度都相等
(1)空间复杂度:O(n);深度优先DFS—栈;广度优先BFS—队列
(2)时间复杂度:领接表O(n+e);领接矩阵O(n2) - T5
深度优先遍历的注意点:若出现环,退回求下一个顶点(栈)
6.4 图的应用
- T1
任何一个无向连通图的最小生成树,有一棵或多颗
(若权值相同,不唯一,但本身为一棵树,唯一;权值不同,唯一) - T4
简单路径:没有环的路径
Dijkstra(从一个顶点到其他所有顶点的最短路径):可以求有回路;可以求任意两点最短路径;但不适合求带权值的最短路径 - T5
选择题求最短路径:直接计算选项比较 - T6
判断一个有向图是否有环:深度优先遍历、拓扑排序、(求关键路径)
求关键路径的第一步是拓扑排序(有争议)
求最短路径不能判断是否有环,有环图也可以求最短路径 - T8
在拓扑排序算法中,暂存的入度为0的顶点,可以使用栈,也可以使用队列
(他们之间前后关系任意) - T9
强连通图:任意两顶点都连通(有环)
若有向图不能排成拓扑序列,则该有向图含有顶点数大于1的强连通分量,可能不是强连通图 - T10
求拓扑序列:注意对入度为0的顶点的判断 - T11
有序的拓扑序列 = 唯一的拓扑序列
(有争议?没明白?) - T13
(求关键路径) - T15
缩短关键路径上任意一个关键活动的持续时间,不一定能缩短关键路径的长度
(关键路径并不唯一,要减少在所有关键路径上的关键活动才可以) - T19 T24 T33
(Dijkstra算法:手算)
求出第二条最短路径后,dist中点内容更新=加上第二条最短路径点结果 - T25
(n个顶点e个边)拓扑排序的时间复杂度是领接表O(n+e);领接矩阵O(n2) - T28
(表达式转化为二叉树) - T34
AOE网中求事件余量最大的活动:
1)求出事件的ve和vl
2)活动的时间余量=vl(后)-ve(前)