第七章 图

第七章  图
图的定义和术语
图、顶点、边、有向图、弧、无向图、有向完全图、无向完全图、相邻顶点、相关联弧或边 、度、子图、路径、图的连通->连通图->连通分量->强连通图->强连通分量、带权图、网
图的存储结构
图的数组存储表示(邻接矩阵)
原理:两个数组->二位数组存储结点的两条边的信息、一维数组存储结点值

c6662a0aa378410989f0afe771aae111.png

特点:有向图邻接矩阵不是对称的、无向图的邻接矩阵是对称的
图的邻接表存储表示
邻接表:

df6ee80092824169bbf2d4bc54f1d07a.png

每个结点有三个域组成:邻接结点域->指示与顶点vi邻接的点在图中的位置,链域->指示下一条边或弧的结点,数据域->存储与边相关的信息,如权值等。
每个链表需要附设一个表头结点,在表头结点中,除了设有链域指向链表中第一个结点之外,还设有存储顶点vi的名或者其他有关信息的数据域。
可以建立一个逆邻接表,即从入度的角度看
在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,但是要判定任意两个顶点之间是否有边或者弧相连,则需要搜索第i或第j个链表,因此不及邻接矩阵方便。
有向图的十字链表存储表示
无向图的邻接多重表存储表示
图的遍历
深度优先搜索:顶点编号从小到大,依次访问当前顶点、下一个未被访问的顶点
广度优先遍历:顶点编号从小到大,依次访问当前顶点,长度为1、2、3……的顶点
最小生成树
普利姆算法
从任意一个顶点出发->依次在与此顶点相连的顶点中找权值最小的一条边->把此顶点包含在树里->重复上述操作:每次往生成树里加一个顶点和一条权值最小的边。

6201625f8ddb41009b4d6dfd938105a3.png

时间复杂度:o(n^2) n代表有n个顶点,与网中的边数无关,因此只适于求解稠密的网的最小生成树。
克鲁斯卡尔算法
从边的最小权值出发->依次寻找权值逐渐增大的边->把边与顶点均加入树中

 74f14306f3584e8d99821743e9a9e5c2.png


时间复杂度:0(eloge)e代表边数,与网中的顶点数无关,因此只适于求边稀疏的网的最小生成树。
拓扑排序
引入:实际例子->aov图(顶点表示活动,弧表示活动间的优先关系的有向图称为顶点表示活动的图)
构建:将aov网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程叫拓扑排序
步骤:1、在有向图中选一个没有前驱的顶点并且输出 2、从图中删除该顶点和所有以它为尾的弧 3、重复上述两步,直至全部顶点输出或者当前图中不存在无前驱的顶点为止。

099d12b7d3674804aab78464fe639f45.png

关键路径
路径长度最长的路径叫关键路径
最短路径
各边上权值之和最小的一条路径
构造最短路径:迪杰斯特拉算法
思想:按照路径长度递增的次序产生最短路径的算法,具体而言是把顶点分为两类,第一组是已经确定放入最短路径的顶点,第二组是不确定是否要放入最短路径的顶点,按照最短路径递增的顺序将顶点放入第一组种,直至从v0出发的所有的顶点均放入第一类的顶点中。注:确保从v0出发到第一组的顶点的最短路径小于到第二组的顶点的最短路径
具体步骤:

 db05e2cf8edd44bb895cb37f085fbb49.png

6462e22bd0a04dca885fed6c97f3a71e.png

提出问题:人们总想知道从源点到某一顶点为终点的最短路径
法一:将图中的每个顶点作为源点重复迪杰斯特拉算法即可
法二:弗洛伊德算法 :逐个顶点试探
弗洛伊德算法:

011ffd4135ea4e5f8084d0357bc2cff9.png

2398beb5f0b142948964c703e9d02861.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值