图的概念
连通:如果两个顶点有路径,则是连通
连通图:如果任意两个点都有连通的路径,则是连通图
连通分量:就是极大连通子图,包含结点有尽可能多的边
生成树:一些结点包含尽可能少的边,但是要确保连通,不存在环路
如果是有向图则为强连通,强连通分量
图的存储结构和基本操作
邻接矩阵法
邻接表法
表示方法不唯一
图的遍历
广度优先遍历:对每一层尽可能的访问完,类似树的层序遍历,需要使用辅助队列
空间复杂度是辅助队列
时间复杂度主要集中在,找边和访问结点上
深度优先遍历:对每个结点尽可能的往深处探索,会使用到递归工作栈,时间复杂度和空间复杂的和BFS相同
最小生成树
Prim
思路:根据顶点找到最小的边,为贪心算法,时间复杂度和边无关,适合边稠密的图
克鲁斯卡尔
思路,每次找到最短的边,两边相连,如果已经连接,则放弃
适合边稀疏 O(Elog2E)
最短路径
单源到各顶点最短:迪杰斯特拉算法
点兑点路径最小:Floyd算法
迪杰斯特拉:从一个点出发每次确定所脸的最小边,然后加入集合并更新路径数组
时间复杂度O(v^2)
Floyd算法允许负权值
拓扑排序
每个点只会出现一次
关键路径
- 缩短关键活动时间不一定减少整个工期,可能从关键活动变为非关键活动
- 关键路径并不唯一