当前位置:   article > 正文

6.图——数据结构(严蔚敏 C语言版)_数 据 结 构(c语言版).

数 据 结 构(c语言版).

6.图

6.1定义和术语

无向图: 每条边都是无方向的
有向图: 每条边都是有方向的
在这里插入图片描述

完全图: 任意两个点都有一条边相连。
在这里插入图片描述

无向完全图:n个顶点,n(n-1)/2条边
有向完全图:n个顶点,n(n-1)条边

网: 边/弧带权的图。
邻接: 有边/弧相连的两个顶点之间的关系。
存在(v, v),则称v,和v互为邻接点;
存在<Vi; Vj>,则称vi邻接到vj,vj邻接于vi。
顶点的度: 与该顶点相关联的边的数目,记为TD(v);在有向图中,顶点的度等于该顶点的入度与出度之和。顶点v的入度是以v为终点的有向边的条数,记作ID(v)顶点v的出度是以v为始点的有向边的条数,记作OD(v)。
路径: 接续的边构成的顶点序列。
路径长度: 路径上边或弧的数目/权值之和。
回路(环): 第一个顶点和最后一个顶点相同的路径。
连通图(强连通图): 在无(有)向图G=(V,{E})中,若对任何两个顶点v、u都存在从v到u的路径,则称G是连通图(强连通图)。

在这里插入图片描述
权: 图中边或弧所具有的相关数称为权。表明从一个顶点到另一个顶点的距离或耗费。
网: 带权的图称为网。
子图: 设有两个图G= (V,{E})、G1= (V1,{E1}),若V1属于 V,E1 属于E,则称G1是G的子图。
极大连通子图: 该子图是G的连通子图,将G的任何不在该子图中的顶点加入,子图不再连通。
连通分量(强连通分量): 无向图G的极大连通子图称为G的连通分量。
在这里插入图片描述
强连通分量: 有向图G的极大强连通子图称为G的强连通分量。
极大强连通子图: 该子图是G的强连通子图,将D的任何不在该子图中的顶点加入,子图不再是强连通的。
极小连通子图: 该子图是G的连通子图,在该子图中删除任何一条边,子图不再连通。
生成树: 包含无向图G所有顶点的极小连通子图。
生成森林: 对非连通图,由各个连通分量的生成树的集合。

在这里插入图片描述

6.2图的存储

6.2.1数组(邻接矩阵)表示法

建立一个顶点表(记录各个顶点信息)和一个邻接矩阵((表示各个顶点之间关系)。

6.2.1.1有向图

例1:画出下面图的邻接矩阵

在这里插入图片描述
邻接矩阵

在这里插入图片描述
注: 在有向图的邻接矩阵中,
第i行含义:以结点vi为尾的弧(即出度边) ;
第i列含义:以结点vi为头的弧(即入度边)。

分析1:有向图的邻接矩阵可能是不对称的。
分析2:顶点的出度=第i行元素之和
顶点的入度=第i列元素之和
顶点的度=第i行元素之和+第i列元素之和

6.2.1.2无向图

例2:画出下面图的邻接矩阵

在这里插入图片描述
邻接矩阵

在这里插入图片描述

分析1:无向图的邻接矩阵是对称的;
分析2:顶点i的度=第i行(列)中1的个数;
特别:完全图的邻接矩阵中,对角元素为0,其余1。

6.2.1.3网(即有权图)的邻接矩阵表示法

在这里插入图片描述

6.2.2邻接表

节点构成:

在这里插入图片描述

在这里插入图片描述

6.2.2.1无向图

在这里插入图片描述

特点:

  • 邻接表不唯一
  • 若无向图中有n个顶点、e条边,则其邻接表需n个头结点和2e个表结点。适宜存储稀疏图。
  • 无向图中顶点vi的度为第i个单链表中的结点数。
6.2.2.2有向图

在这里插入图片描述

  1. 邻接表特点:
    顶点vi的出度为第i个单链表中的结点个数。
    顶点vi的入度为整个单链表中邻接点域值是i-1 的结点个数。

  2. 逆邻接表特点:
    顶点vi 的入度为第i个单链表中的结点个数。
    顶点vi 的出度为整个单链表中邻接点域值是i-1的结点个数。

6.2.3十字链表

1.结点:
在这里插入图片描述

在这里插入图片描述

2.邻接表:
在这里插入图片描述

3.十字链表:
在这里插入图片描述

6.3图的遍历

6.3.1深度优先遍历

原则: 一条路走到底,直到走不通,返回上一有通路的节点,再继续走。

  • 深度优先搜索(Depth First Search,DFS)遍历类似于树的先序遍历,是树的先序遍历的推广。
  • 用邻接矩阵来表示图,遍历图中每一个顶点都要从头扫描该顶点所在行,时间复杂度为O(2)。
  • 用邻接表来表示图,虽然有2e个表结点,但只需扫描e个结点即可完成遍历,加上访问r个头结点的时间,时间复杂度为O(n+e)。
  • 稠密图适于在邻接矩阵上进行深度遍历;稀疏图适于在邻接表上进行深度遍历。
    1.用邻接表进行表示
    2.用邻接矩阵进行表示
    在这里插入图片描述

6.3.2广度优先遍历

原则: 从一结点开始,依次访问该点所有的邻接点,再按照这些点被访问的先后次序访问他们的邻接点。重复此过程。

在这里插入图片描述

遍历:
在这里插入图片描述

6.4最小生成树

6.4.1生成树

生成树: 所有顶点均由边连接在一起,但不存在回路的图。
在这里插入图片描述

  • 一个图可以有许多棵不同的生成树所有生成树具有以下共同特点。生成树的顶点个数与图的顶点个数相同;
  • 生成树是图的极小连通子图,去掉一条边则非连通;
  • 一个有n个顶点的连通图的生成树有n-1条边;
  • 在生成树中再加一条边必然形成回路。
  • 生成树中任意两个顶点间的路径是唯一的。

在这里插入图片描述
深度优先(左)和广度优先(右)生成树

6.4.2最小生成树

最小生成树: 给定一个无向网络,在该网的所有生成树中,使得各边权值之和最小的那棵生成树称为该网的最小生成树,也叫最小代价生成树。

6.4.2.1Prim算法(普利姆算法)

普里姆算法的构造过程
假设N=(V,E)是连通网,TE是N上最小生成树中边的集合。①U={uo}(uEW),TE=号。
在所有uEU, vEV-U的边(u,v)∈E中找一条权值最小的边(uo vo)并入集合TE,同时v并入U。
③重复②,直至U=V为止。
此时TE中必有n-1条边,则T=(V, TE)为N的最小生成树。

在这里插入图片描述

6.4.2.2Kruskal算法(克鲁斯卡尔算法)

克鲁斯卡尔算法的构造过程
假设连通网N=(V, E),将N中的边按权值从小到大的顺序排列。
①初始状态为只有n个顶点而无边的非连通图T=(V,),图中每个顶点自成一个连通分量。在E中选择权值最小的边,若该边依附的顶点落在T中不同的连通分量上(即不形成回路),则将此边加入到T中,否则舍去此边而选择下一条权值最小的边。
③重复②,直至T中所有顶点都在同一连通分量上为止。

在这里插入图片描述

6.5拓扑排序

有向无环图:

  • AOV网 (Active on Vertex)
    用一个有向图表示一个工程的各子工程及其相互制约的关系,其中以顶点表示活动或表示活动之间的关系。称顶点表示活动的网。。 Active on Vertex network.
  • AOE网(Active on Edge)
    用一个有向图表示一个工程的各子工程及其相互制约的关系。以弧表示活动,以顶点表示活动开始或结束事件,边表示活动的网。

拓扑排序
在aov网中设有回路的前提下,将全部活动排成一个线性序列,使aov网中有弧<i,j>存在。i一定排在j前面,具有这种性质的线性序列为拓扑有序序列,相应的算法称为拓扑排序。
拓扑排序的方法

  1. 在有向图中选一个没有前驱的定点输出。
  2. 从图中删除该顶点和所有以它为尾的弧。
  3. 重复上述两步,直到全部顶点输出或当图中,不存在无前驱的顶点为止。

在这里插入图片描述

在这里插入图片描述

检测AOV网中是否存在环的方法。
对有象图构造其顶点的拓扑有序序列入网中所有景点都在它的拓扑有序序列中,这该aov网必定不存在。

6.6关键路径

关键路径: AOE网中边表示活动的网络顶点表示事件弧表示活动图的权表示活动持续时间事件表示在他之前的活动已经完成,他之后的活动可以开始。

  • 关键路径——路径长度,最长的路径。
    路径长度——路径上各活动持续时间之和。
    源点——入度为0的顶点。
    汇点——出度为0的顶点。

ve(vj):表示事件vj的最早发生时间。
vl(vj) :事件vj的最迟发生时间。
e(i) :活动 AI的最早开始时间。
l(i) :活动ai最迟开始时间。
l(i)-e(i) :完成活动AI的时间余量。
关键活动:关键路径上的活动。即 l(i)-e(i)==0的活动。
求关键路径具体步骤(方法)

例:求下图的关键路径

求关键路径的步骤:

  1. 求ve(i), vl(j)

  2. e(i), l(i)

  3. 计算l(i)-e(i)

    ve(j) = MAX{ve(i)+wi,j} (正序,选权值和的最大)

    vl(i) = MIN{vl(j) - wi,j} (反序,选权值差的最小)

    (1)e(i) = ve(j)

    (2) l(i) = vl(k) - wj,k

在这里插入图片描述
顶点发生的时间:
在这里插入图片描述

活动开始的时间:
在这里插入图片描述

ve:正序选和最大。

vl:反序选差的最小。

e = 前一个顶点的ve。

l = 前一个顶点的vl - ai。
最后选出l-e = 0 的路径连起来就是关键路径

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/635040
推荐阅读
相关标签
  

闽ICP备14008679号