文章目录
前言
一、最小生成树的两个算法(Prim & Kruskal)
1. 关于Prim
思路:开始时随机选择一个顶点,之后选择一个与当前T顶点集合最近的顶点
直至所有顶点都并入树
适用于解边稠密的图
生成树不唯一
2.关于Kruskal
每次操作选择权值最小且不在已存在树里的边
算法适用边稀疏而顶点较多的图
二、关于最短路径的两个算法(Dijkstra & Floyd)
1.关于Dijkstra
预设三个数组
final表示有无访问(初始设为False)
dist表示距离
path表示从哪个结点指向
每轮dist最小的一个数将final设为True,并将他到其他结点的最短路径更新
不适合带有负权值的图
2.关于Floyd
先求出邻接矩阵,然后再以每个结点作为中转点计算
A[i][j] > A[i][0] + A[0][j](若成立,则更新A[i][j]的值)
3.拓扑排序
把度为0的点依次出列形成拓扑排序
有拓扑排序的图一定是有向无环图
拓扑排序一定,图并不唯一
4. 关键路径相关
事件最早发生时间 & 事件最迟发生时间
从开始顶点出发,遇到多条路径时,选活动时间长的那一条
从末尾顶点出发,遇到多条路径时,选活动时间少的那一条
活动最早开始时间 & 活动最晚发生时间
弧尾顶点的事件最早开始时间的值
弧头顶点的事件最迟发生时间的值减去活动时间
关键活动
活动最迟发生时间减去活动最早发生时间差值为 0的