北航软件工程专业考研991数据结构总结:
六、图
1.图的基本概念、名词术语;
2.图的邻接矩阵存储方法和邻接表(含逆邻接表)存储方法的构造原理及特点;
3.图的深度优先搜索与广度优先搜索;
4.最小(代价)生成树、最短路径、AOV网与拓扑排序的基本概念。
1.图的基本概念、名词术语;
基本概念:
定义:图是非空有穷顶点的集合 + 顶点之间的关系 构成 G(V,E),V是顶点的集合,E是边或弧的集合
分类:
无向图:(vi, vj)属于E,必有(vj,vi)属于E,顶点的前后顺序无关
有向图:<vi, vj>不同于<vj, vi>
网络:与边有关的数据称为权,边上带权的图叫做网络
名词术语:
顶点的度:依附于顶点vi的边数称为度 TD(vi)
有向图:
入度:以顶点vi作为终止点的边数称为入度ID(vi)
出度:以顶点vi作为起始点的边数称为出度OD(vi)
结论:
①、边数E = 各个顶点的度的总和/2
②、具有n个顶点的无向图最多有 n(n-1)/2 条边 每个顶点可以向其他n-1个顶点发出一条边,n个顶点总边数 n(n-1),根据相互性,除以2
③、具有n个顶点的有向图最多有 n(n-1) 条边
完全图:边数达到最大
稠密图:边数达到或者接近最大边数的图
稀疏图:否则。。。
路径:顶点vx到vy之间有路径P(vx, vy)的充分必要条件为:存在顶点序列 vx, vi1, vi2, ... vim, vy,并且序列中相邻顶点构造的偶对为图的一条边
回路(环):出发点与终止点相同的路径称为环,回路
简单路径:顶点序列中顶点不重复出现的路径叫做简单路径
路径长度:
不带权的:经过的边的数目
带权:经过的边的权之和
子图:g(v,e) 是 G(V, E)的子图,有 v 属于 V,e属于E,则g为G的子图
图的连通:
无向图的连通:顶点vi到vj有路径,则vi与vj是连通的,图中任意两个顶点都是连通的,则图是连通的
极大连通子图就是连通分量,连通图的极大连通子图就是自己,非连通图的连通分量不是唯一的
有向图的连通:顶点vi到vj有路径并且vj到vi也有路径,则vi与vj是连通的,图中任意两个顶点都是连通的,则图是强连通的
极大强连通子图叫做强连通分量,不是强连通图也可以有相连通分量
生成树:
连通图G(V,E)有n个顶点,包含n个顶点,n-1条边的极小连通子图叫做G的一个生成树
特点:
生成树不含有回路,如果给生成树加一条边,则必然产生回路,减少一条边,则必然造成不连通
2、图的邻接矩阵存储方法和邻接表(含逆邻接表)存储方法的构造原理及特点
邻接矩阵
1)、定义一个一维数组V[0..n-1]存放所有顶点信息;
2)、定义一个二维数组E[0..n01][0..n-1],存放所有顶点之间的关系,该矩阵就是邻接矩阵
E[i][j]:值为1,代表顶点vi,vj之间有边,值为0,代表vi,vj之间无边
对于带权的图,有E[i][j]:wij表示边的权值,无穷大,表示无边
特点:
①、无向图的邻接矩阵一定是对称矩阵 因为vi,vj有边,那么vj,vi也有边
②、不带权的有向图的邻接矩阵一般是稀疏矩阵
③、无向图的第 i 行或者i列 的非0或者非无穷大的元素个数就是顶点 vi 的度
④、有向图中第 i 行非0或者非无穷的元素个数代表顶点vi的出度
第 i 列非0或者非无穷的元素个数代表顶点vi的入度
邻接表:
构造:
1)、每个链表设置一个头结点,用来存放一个顶点的数据信息,称之为顶点结点
其构造为 vertex link
vertex存放顶点数据信息,link指向链表中的第一个结点地址
n个头结点之间是一维数组
2)、第i个链表中的每一个链结点(称之为边结点)表示以第i个顶点为出发点的一条边,
其构造为 adjvex weight next
其中,next指向下一条边结点,weight为带权边的权值,不带权的无此数据域,adjvex表示以第i个结点为出发点的边的另一端的结点在数组中的位置
特点:
①、无向图中第i个链表中链结点的个数就是顶点i的度
②、有向图中第i个链表中链结点的个数就是顶点i的出度
③、图中有n个顶点,e条边,则 无向图需要n个头结点,2e个边结点
有向图需要n个头结点,e个边结点
无向图边结点总数一定是偶数,边结点个数为奇数的一定是有向图
逆邻接表:第i个链表的边界点表示第i个顶点为终止点的边
#define MAXV 最大顶点个数
typedef struct edge{
int adjvex;
int weight;
struct edge *next;
}ELink;
typedef struct ver{
verType vertex;
ELink *link;
}VLink;
VLink G[MAXV]
3、图的深度优先搜索和广度优先搜索
深度优先搜索
从某个指定的顶点v出发,先访问v结点,然后从v顶点的某个未被访问的邻接点出发,继续进行深度优先搜索,直到与v连通的所有顶点都被访问
如果此时还有未被访问的结点,则从另一个未被访问的结点出发,继续上述,直到遍历所有结点
算法:
为了标记某一时刻图中顶点的访问情况,需要一个一维数组visited[0..n-1],值为1表示被访问过了,值为0表示未被访问
算法分析:
n个顶点,e条边,采用邻接表存储,时间复杂度O(n+e),采用邻接矩阵存储,时间复杂度O(n^2)
深度优先 中序遍历类似
广度优先搜索
从某个指定的顶点v出发,先访问v结点,然后依次访问顶点v未被访问过的链结点,再从该结点出发,按照同样的规则访问它们的链结点,直到与v连通的顶点都被访问
如果此时还有未被访问的结点,则从另一个未被访问的结点出发,继续上述,直到遍历所有结点
广度优先 按层遍历
4、最小(代价)生成树,最短路径,AVO网与拓扑排序的基本概念
最小代价树:带权连通图中,总的权值之和最小的带权生成树称为最小生成树,也叫最小代价树,最小花费树
原则:
1)、只能利用图中的边构造;
2)、只能使用且仅能使用图中的n-1条边来构造;
3)、不能使用图中产生回路的边
最短路径:
AOV网 有前驱和后继
拓扑排序:先从没有入度的结点开始
删除该结点及所有边
继续进行,直到为空,或者不存在没有入度的结点(有回路)
来源:CSDN
作者:马小坡
链接:https://blog.csdn.net/kakaluote81/article/details/103601508