知识补全:
十字链表:
每个结点
不仅有它作为源点的链表
还有它作为目标点的链表
这不是两个链表,是通过交错链接达成的
最小生成树:
连通所有点的树,要求树所有边的权值之和最小
以下两个算法都是紧紧抓住“最小”和“连通”,一个是已知连通找最小,一个是已知最小找连通
Prim算法:用于稠密图
树每次选择一个边来进行扩展,选择哪一个呢?当然是一头树内,一头树外的边中最短的哪一个
Kruskal算法:用于稀疏图
直接把边排个序,找出最小的n-1条边就是了。当然其中有跳过的(比如有12 23了,13虽然小也不要它)
单源最短路径
求A点到所有点的最小值
Dijkstra:每次拉一个点O(已知的距离A最近的点)进来点集S,看看如果从O那里经过能不能近一点(AO+OX<AX,X不在S内)
S里的点可以确定
Floyd:每次看一个点,看这个点能拉近哪些路径的距离
拓扑排序:每次删除没有前驱的顶点
逆拓扑排序:每次删除没有后继的顶点
最早开始时间:S到A的距离最长时
最晚开始时间:A到E的距离最短时
关键路径:最大路径
关键活动:关键路径上的点,满足最早开始时间=最晚开始时间