跳转至

图

图的基本概念

  1. 简单路径就是顶点不重复出现的路径。(回路不算,但是有简单回路)

image-20260422191640480

习题笔记

  1. 极大连通子图要求子图必须连通,而且包含尽可能多的顶点和边;极小连通子图既要保持子图连通,又要使得边数最小。

图的存储及基本操作

邻接矩阵法

image-20260422200536953

邻接表法

image-20260422200918341

十字链表、邻接多重表

image-20260422201705321

图的基本操作

image-20260422202601584

图的遍历

广度优先遍历(BFS)

image-20260427192320333

深度优先遍历(DFS)

image-20260427193520716

图的应用

最小生成树(最小代价树, Minimum-Spanning-Tree, MST)

  1. Prim(定点找权值最小的边)
  2. Kruskal(每次都选最小的边)
  3. 只能用于无向图!!!

贪心思想

image-20260427194303978

最短路问题

BFS

image-20260427195223147

Dijkstra

image-20260427195443087image-20260427195510885

Floyd

image-20260427200350686image-20260427201118254image-20260427201520007

image-20260427200405088

有向无环图描述表达式

有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图(Directed Acyclic Graph)

不唯一

image-20260427204910909

拓扑排序

  1. 如何判断拓扑序列唯一?
  2. 每次让入度为0的点进入队列,再让它相邻的点入度 -= 1,再进行入队操作,若队列中含有多个入度为0的点,则不唯一;若整个过程中队列中元素个数一直 <= 1,那就唯一

image-20260427205115898

关键路径

  1. v - vertex(点) e - early l - late
  2. 求解顺序

  3. 从源点用拓扑排序求点的最早开始时间(ve),ve[源点] == 0

  4. 从汇点用逆拓扑排序求点的最晚开始时间(vl),ve[汇点] == vl[汇点]

  5. 求活动的最早开始时间(e),每个活动的最早开始时间即为对应弧尾的最早开始时间

  6. 求活动的最晚开始时间(l),每个互动的最晚开始时间即为对应弧头的最晚开始时间减去弧的权值

  7. 最早开始时间和最晚开始时间相等的活动即为关键路径(可能不唯一)

活动的最晚开始时间与最早开始时间之差称为时间余额,就是可以拖延的时间

image-20260427205954950

image-20260427211809269