数据结构之图

谁说我不能喝 提交于 2019-12-24 07:44:07

北航软件工程专业考研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网 有前驱和后继
拓扑排序:先从没有入度的结点开始
          删除该结点及所有边
          继续进行,直到为空,或者不存在没有入度的结点(有回路)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!