图的学习.

目录

一、图的基本概念

1.1图的种类

1.2顶点的度、入度和出度

1.3边的权和网

1.4路径、路径长度和回路

二、图的存储结构

2.1邻接矩阵法

2.2邻接表法

2.3十字链表

2.4邻接多重表

三、图的遍历

3.1广度优先搜索

3.2深度优先搜索

四、图的应用

4.1最小生成树

4.1.1普里姆算法

4.1.2克鲁斯卡尔算法

4.2最短路径

4.2.1迪杰斯特拉算法

4.3拓扑排序

4.4关键路径


一、图的基本概念

1.1图的种类

①有向图:v,w表示顶点,顶点间的边是有方向的。

②无向图:v,w表示顶点,顶点间的边没有方向。

③简单图:不存在重复边,不存在顶点到自身的边。

④多重图:存在重复边,存在顶点到自身的边。

⑤完全图:(简单完全图)

对于无向图,任意两个顶点之间都存在边,边的条数:(n*(n-1))/2

对于有向图,任意两个顶点之间都存在方向相反的两条弧,边的条数:n*(n-1)

子图: 顶点和边是另一个图的子集的图。

第二个图的顶点和边都是第一个图的子集,所以图2是图1的子图。

生成子图:顶点相等,边是另一个图的子集的图。

第二个图的顶点和第一个图相等,边是它的子集,所以图2是图1的生成子图。

连通图:图中任意两个顶点都是连通的。

极小连通子图:既要保持图连通又要使得边数最少的子图。

⑧生成树:包含图中全部顶点的一个极小连通子图。(边数=顶点数-1)

图2是图1的生成树。

1.2顶点的度、入度和出度

度:一个顶点连接的边数

①对于无向图:其全部顶点的度的和等于边数的2倍

②对于有向图:

·入度是以顶点v为终点的有向边的数目,出度是以顶点v为起点的有向边的数目;

·顶点的度=入度和出度之和;

·有向图的全部顶点的入度之和与出度之和=,并且=边数。

1.3边的权和网

权:边上带有数值,这样的图称为带权图或网

1.4路径、路径长度和回路

路径:顶点到另一个顶点的路线

路径长度:顶点到另一个顶点的距离

回路:从某一个顶点出发,最后又回到这个顶点

二、图的存储结构

2.1邻接矩阵法

行列与顶点有关,与边无关

①对于无向图:A[i][j]=1,(vi,vj)存在;A[i][j]=0,(vi,vj)不存在 (对称矩阵)

②对于有向图:A[i][j]=1,(vi,vj)存在;A[i][j]=0,(vi,vj)不存在

③对于带权图:A[i][j]=权值,(vi,vj)存在;A[i][j]=0或无穷大,(vi,vj)不存在

问:

①n个顶点的无向连通图用邻接矩阵表示时,该矩阵至少有2(n-1)个非零元素。

(有n-1条边,每条边表示两次)

②带权有向图G用邻接矩阵A存储,则顶点i的入度等于A中第i列 非零非无穷元素之和,出度即为A中第i行非零非无穷元素之和

2.2邻接表法

①对于无向图

存储空间=O(|V|+2|E|) ,顶点存储1次,而边存储了2次。

②对于有向图

存储空间=O(|V|+|E|),边和顶点都只存储了1次。

特点:

①对于稀疏图,采用邻接表表示能够节省空间

②图的邻接表表示不唯一

③在有向图 的邻接表表示中,求一个给定顶点的出度 只需计算其邻接表中的结点个数。

头结点指的是顶点,表结点指的是边。

2.3十字链表

针对无向图的邻接表法结点的入度难,采用十字链表法改进

2.4邻接多重表

针对无向图中邻接表边存储2次的问题,采用邻接多重表法改进。

三、图的遍历

定义:从图中的某一点出发,按照某种搜索方法沿着图中所有顶点访问一次且仅访问一次

算法:广度优先搜索,深度优先搜索

3.1广度优先搜索

类似于二叉树的先序遍历,类似于树的层次遍历,例:

3.2深度优先搜索

类似于树的先序遍历,例:

注:如果从一个无向图的任意顶点出发进行一次广度和深度优先搜索即可访问所有顶点,那么该图一定是连通图。

四、图的应用

4.1最小生成树

带权连通无向图中,所有生成树中权值之和最小的生成树。

4.1.1普里姆算法

①任取一顶点,去掉所有边

②选择一个与当前顶点集合距离最近的顶点,并将该顶点和相应的边加入进来,同时不能形成回路。

③重复②,直至图中所有顶点都并入。

4.1.2克鲁斯卡尔算法

①去掉所有边

②选边(权最小,且不构成回路)

③重复②,直至图中所有顶点都并入

最小生成树边数=顶点数-1

4.2最短路径

4.2.1迪杰斯特拉算法

4.3拓扑排序

·AOV网:顶点表示活动,<Vi,Vj>

·每个顶点出现且只出现一次,若存在一条从顶点A到顶点B的路径,则在排序中顶点B出现在顶点A的后面。

算法实现:

①从AOV网中选择一个没有前驱的顶点并输出

②从网中删除该顶点和所有以它为起点的有向边

③重复①②直到当前AOV网为空或当前网中不存在无前驱的顶点为止

4.4关键路径

·AOE网:以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销

·关键路径:从开始顶点到结束顶点的所有路径中,具有最大路径长度的路径

·关键活动:关键路径上的活动

算法实现:

①令ve(源点)=0,求最早发生时间ve()

ve()=Max{ve(j)+weight(vj,vk)} (从前往后算)

②令vl(汇点)=ve(汇点),求最迟发生时间vl()

vl()=Min{vl(j)-weight(vk,vj)} (从后往前算)

③根据ve()值求所有弧的最早开始时间e()

e()=ve()

④根据vl()值求所有弧的最迟开始时间l()

l()=vl()-weight(vk,vj)

⑤求AOE网中所有活动的差额d(),找出所有d()=0的活动构成关键路径

d()=l()-e()

例:

相关推荐
Json____9 分钟前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
五味香12 分钟前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
Chef_Chen21 分钟前
从0开始学习机器学习--Day22--优化总结以及误差作业(上)
人工智能·学习·机器学习
虾球xz36 分钟前
游戏引擎学习第11天
stm32·学习·游戏引擎
心怀梦想的咸鱼39 分钟前
Ue5 umg学习(三)文本控件
学习·ue5
心怀梦想的咸鱼40 分钟前
Ue5 umg学习(二)图像控件,锚点
学习·ue5
小A1592 小时前
STM32完全学习——系统时钟设置
stm32·嵌入式硬件·学习
2301_775281192 小时前
柯桥生活英语口语学习“面坨了”英语怎么表达?
学习·生活
江梦寻2 小时前
思科模拟器路由器配置实验
开发语言·网络·网络协议·学习·计算机网络
一只特立独行的程序猿2 小时前
关于GCC内联汇编(也可以叫内嵌汇编)的简单学习
汇编·学习·gcc