图Graph
#图的基本概念
数组表示法(邻接矩阵)
- 无向图(该图有n个顶点、e条边)
- 无向图中,顶点Vi的度TD(Vi)是邻接矩阵A中第i行元素之和.
- 有向图中:
- 顶点Vi的出度是A中第i行元素之和
- 顶点Vi的入度是A中第i列元素之和
邻接表Adjacency
方法
- 为图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点Vi的边(有向图中指以Vi为尾的弧)
层次渐进,由小到大建Graoh
1 |
|
特点
- 无向图
- 顶点Vi的度为第i个单链表中的结点数
- 有向图
- 顶点Vi的出度–为第i个单链表中的结点个数
- 顶点Vi的入度–为整个单链表中邻接点域值是i的结点个数
- 领结表的缺点:
- 无向图中,边是一种“对称”关系。导致任一条边的结点都有两个,而且分别在两个不同的链表中。即:存贮表示中信息有冗余,维护不容易
无向图的邻接多重表Adjacency Multilist
图的遍历Traversing Graph
从图中某一个顶点出发,访问图中的其余顶点,且使每个顶点仅被访问一次。
- 两种方法对无向图和有向图都适用
- 深度优先搜索类似于树的先根遍历
- 广度优先搜索类似于树的层次遍历
深度优先遍历
无向图
有向图
广度优先遍历
无向图
有向图
图的连通性
生成树
- 所有顶点均由边连接在一起,但不存在回路
- 一个图可以有许多棵不同的生成树
- 一个有n个顶点的连通图的生成树有n-1条边
- 生成树中任意两个顶点间的路径是唯一的
- 在生成树中再加一条边必然形成回路
- 生成树是图的极小连通子图
- 生成树的顶点个数与图的顶点个数相同
含n个顶点n-1条边的图不一定是生成树,如 👇
最小生成树
每条边上权值之和最小
普里姆算法Prim
从一个点开始,不断的去寻找最小的边,进而找到那个点,然后继续
- 算法评价:T(n)=O(n²)
- 算法实现:图用邻接矩阵表示
柯鲁思卡尔算法 Kruskal
先将所有店写出,再去找最小的边
拓扑排序
问题提出:学生选修课程问题
- 顶点——表示课程
- 有向弧——表示先决条件
- 若课程i是课程j的先决条件,则图中有弧
学生应按怎样的顺序学习这些课程,才能无矛盾、顺利地完成学业
——拓扑排序
AOV网 (Activity On Vertex network)
用顶点表示活动,用弧表示活动间优先关系的有向图
是图中有向边,则vi是vj的直接前驱;vj是vi的直接后继 - AOV网中不允许有回路,这意味着某项活动以自己为先决条件
拓扑排序
把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程
- 在有向图中选一个没有前驱的顶点且输出它
- 从图中删除该顶点和所有以它为尾的弧
- 重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止
题目:
步骤:
关键路径AOE(Activity On Edge)
问题提出:工程问题
把工程计划表示为有向图,用顶点表示事件,弧表示活动;
每个事件表示在它之前的活动已完成,在它之后的活动可以开始
边表示活动的网.AOE网是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续时间.
- 路径长度——路径上各活动持续时间之和
- 关键路径——路径长度最长的路径
- Ve(j)——事件Vj的最早发生时间
- Vl(j)——事件Vj的最晚发生时间
- e(i)——表示活动ai的最早开始时间
- l(i)——表示活动ai的最晚开始时间
- l(i)-e(i)——表示完成活动ai的时间余量
- 关键活动——关键路径上的活动(即:l(i)=e(i)的活动)
⚠️注意注意
###最长路径长度叫做时间的最早发生时间,不是让你找权值最小的
最短路径
从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径
问题提出:交通运输网
- 顶点——表示城市
- 边——表示城市间的交通联系
- 权——表示此线路的长度或沿此线路运输所花的时间或费用等
问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径。
方法一:迪杰斯特拉算法思想Dijkstra
步骤
- 初使时令 S={V0},T={其余顶点},T中顶点对应的距离值
- 若存在
,为 弧上的权值 - 若不存在
,为无穷 - 从T中选取一个其距离值为最小的顶点W,加入S
- 对T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值比不加W的路径要短,则修改此距离值
- 重复上述步骤,直到S中包含所有顶点,即S=V为止
方法二:弗洛伊德(Floyd)算法
略
【自我小总结】
- 最小生成树
- 权值最小的极小连同子图
- Prim
- Kruskal
- 拓扑排序
- 学生选课问题,有先决条件
- 不断删除以它为尾的线
- 关键路径
- 工程问题
- 最长路径叫做时间的最早发生时间
- 最短路径
- 交通运输网
- Dijkstra
- Floyd
- 点到点