数据结构之图
一,什么是图
表示多对多的关系
图包含一组顶点和一组边(不考虑重边和自回路)
二,图的表示
邻接矩阵表示图:有边的表示1,无边的表示0
邻接矩阵优点:
- 直观
- 查找方便
- 查询一个顶点的所有邻接点方便
- 方便计算度(该顶点的边数),入度,出度(有向图需要查看行(出度)和列(入度))
邻接矩阵缺点:
- 浪费空间:稀疏图(点很多而边很少)
- 浪费时间:
邻接表:只存非零元素,不唯一,稀疏图
三,图的遍历
DFS(深度优先搜索,Depth First Search): 原路返回=>树的先序遍历
BFS(广度优先搜索,Breath First Search)=>树的层次遍历
连通:如果从v到w存在一条(无向)路径,则称v和w是连通的
路径:v到w的路径是一系列的顶点的集合,其中任一对相邻的顶点间都有图中的边。路径的长度是路径中的边数(如果带权,则是所有边的权重和)。如果v和w之间的所有顶点都不同,则称简单路径(无回路)
回路:起点等于终点的路径
连通图:图中任意两顶点均连通
连通分量:无向图中的极大连通子图
强连通;有向图中顶点v和w之间存在双向路径(既有从v->w又有从w->v,可以不是同一条),则称v和w是强连通
弱连通:去掉方向后的v和w是连通的
强连通图:有向图中任意两顶点均强连通
强连通分量:有向图的极大强连通子图
六度空间算法
中序遍历和前序遍历直接求后序遍历
完全二叉搜索树的核心代码
最短路径
网络:带权的图,
- 单元最短路径:固定源点;
- (有向)无权图
- 递增顺序
- (有向)有权图
- 负值圈(不考虑)
- Dijkstra算法
实现上述代码中红线伪代码的方法
- (有向)无权图
- 多元最短路径:任意两点
- 直接将单元最短路算法调用V遍
- Floyd算法
-
最小生成树
定义:
稠密图的贪心算法:Prim算法,从一个点一点一点向外扩张延伸,进入树内的点的dist都为0,往外延伸时是与树中任意一个结点距离最小
稀疏图的贪心算法:每次从剩余所有边中取最短的边,所选边不能构成回路
拓扑排序
1. AOV(Activity On Vertex) 网络
算法部分: