第七章:图(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41668547/article/details/81702792

1、十字链表,将邻接表与逆邻接表结合起来。

   顶点表结点结构: 

Data

Firstin

Firstout

数据

入边表头指针

出边表头指针

边表结点结构:

Tailvex

Headvex

Headlink

Taillink

弧起点,在顶点表的下标

弧终点,在顶点表的下标

入边表指针域

边表指针域

 

2邻接多重表

边表结点结构:

Ivex

Ilink

Jvex

Jlink

 

 

Ivex和jvex是与某条边依附的两个顶点在顶点表中的下标,ilink指向依附顶点ivex的下一条边,jlink指向依附顶点jvex的下一条边。

 

3、边集数组

边数组结构:

Begin

End

Weight

 

 

4图的遍历有两种遍历方案:深度优先遍历(深度优先搜索DFS)和广度优先遍历(广度优先搜索BFS)。

5深度:从图中某个顶点出发,并访问,然后未被访问的邻接点出发深度优化遍历图,直到全被访问,若有尚未被访问的,选择图中未曾被访问的顶点做起始点重复上述过程(邻接矩阵和邻接表的代码,241页)。

6N个顶点e条边,邻接矩阵O(n^2),邻接表O(n+e),对于稀疏图来说,邻接表效率更高。

7广度:类似于树的层序遍历,变形,一层一层入队列,一个一个出队列。(邻接矩阵和邻接表的代码,243页)。

8最小生成树,代价最小,权值和最小。

9普里姆算法,先做出邻接矩阵,找出代价最小的边,必有n-1条边。(代码在248面)。

10、克鲁斯卡尔算法,先做出边集数组,按权值从小到大排列,不让形成环路选出最代价最小的即可。(代码252)。

11最短路径,源点(起点)到终点经过的边上权值之和最小的路径。

12、迪杰斯特拉算法,一步一步求最短,以上一步的最短做基础。(代码261)。

13、弗洛伊德算法,有两个二维数组,D:顶点到顶点的最短距离。P:对应顶点的最小路径的前驱矩阵(所有顶点到所有顶点的最短)。

D0 [v][w]= min{ D-1 [v][w],D-1 [v][0] + D-1 [0][w] }

K=0,代表经过v0中转,取小(代码269)。

14、拓扑排序,有向图,顶点表示活动,弧表示优先关系,称为AOV网(不能存在回路)。

15、从顶点vi到顶点vj有一条路径,则在顶点序列中顶点vi必须在顶点vj之前,这个序列称拓扑序列。

16、拓扑排序算法,从AOV网中选择一个入度为0的顶点输出,然后删去此顶点,并删除此顶点为尾的弧,直到输出全部顶点。

邻接表结构:

In

Data

Firstedge

入度

数据

指针域

需要栈来存储处理过程中入度为0的顶点(代码274)。

17关键路径,带权有向图,顶点表示时间,有向边表示活动,边上的权值表示活动的持续时间,称为AOE网。

18路径上各个活动所坚持的时间之和称为路径长度。

从源点到汇点具有最大的长度的路径叫关键路径。

在关键路径上的活动叫关键活动。

19关键路径算法原理:

(1)事件的最早发生时间etv:即顶点v的最早发生时间。

(2)事件的最晚发生时间ltv:即顶点v的最晚发生时间。

(3)活动的最早开工时间ete:即弧a 的最早发生时间。

(4)活动的最晚开工时间lte:即弧a 的最晚发生时间。

20、关键路径算法,取最大(代码281)。

猜你喜欢

转载自blog.csdn.net/qq_41668547/article/details/81702792