图
图是一种数据间具有多对多关系的非线性数据结构
顶点的度:指与该顶点关联的边的数目
全部顶点的度之和为边数的两倍
图的存储有邻接矩阵,邻接表,十字链表
邻接矩阵
边采用顺序存储结构,用二维数组存储
邻接表
采用链式存储结构,存储行的后继,即矩阵行的单链表
十字链表
图的邻接多重表:采用链式存储结构,存放行和列的后继
图的广度优先算法
从某一个顶点开始,一次性访问他的邻接点,直到访问结束
- 利用栈实现
- 从源节点开始把节点按照深度放入栈,然后弹出
- 每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈
- 直到栈变空
图的深度优先算法
从某一个顶点开始,一次访问一个顶点,直到访问结束
- 利用队列实现
- 从源节点开始依次按照深度进队列,然后弹出
- 每弹出一个点,把该节点所有没有进过队列的邻接点放入队列
- 直到队列变空
最小生成树
kruskal算法
依次找出权值最小的边建立最小生成树,每次新增的边不能使生成树产生回路,直到找到n-1条边
kruskal算法的执行时间主要取决于图的边数,时间复杂度为O(n^2),适用于稀疏图的操作
Prim算法
最短路径
拓扑排序和关键路径
参考资料
《数据结构(Python版)》作者:吕云翔、郭颖美、孟爻