(一)图的基本概念
简单图 ①不存在重复边②不存在顶点到自身的边
完全图 ①任意两顶点之间都存在边
(二)图的存储及基本操作
邻接矩阵法 存储顶点之间关系的二维数组称为邻接矩阵
邻接表法 为图中每个顶点建立一个单链表, 存放连接该顶点的边(或出去的边)
十字链表 ✿
邻接多重表(只适用于无向图)
与十字链表相比, 把邻接多重表的入边表下一个改成某一顶点关联边的下一个, 把出边表下一个改成另一顶点关联边的下一个. 参考链接同上.
(三)图的遍历
深度优先搜索
广度优先搜索
(四)图的相关应用
最小生成树
Prim算法 贪心, 每次把不在生成树中的最近顶点添加到生成树中
方法类似于下面的最短路径算法
Kruskal算法 贪心, 每次选择最短的边 但是不能产生回路
最短路径
Dijkstra算法 贪心, 每次选择最近的点
data数组 存放从v0到其他顶点的最短路径长度
path数组 存放从源点到顶点i之间的最短路径的前驱节点
在每个循环内部都是 更新最短路径长度->查找最短路径->选定一个点
Floyd算法
递推产生一个n阶方阵序列 表示从i到j的最短路径长度 表示经过第k个顶点的运算步骤 三层循环, 时间复杂度O(顶点^3)
拓扑排序 AOV网 Activity On Vertex
重复以下步骤①从图中选择一个没有前驱的顶点并输出
②从图中删除该顶点和所有以它为起点的有向边
关键路径 AOE网 Activity On Edge