数据结构-图

目录

*一、基本概念

 二、图的存储及其操作

*2.1邻接矩阵法

 *性质

*2.2邻接表法

 *3.3十字链表法存有向图

*3.4邻接多重表存储无向图


*一、基本概念

        由顶点V和边E组成,记为\tiny G=(V,E),其中\tiny V(G)表示G中顶点的有限非空集;\tiny E(G)表示G中顶点之间的关系(边)集合,若\tiny V=\begin{Bmatrix} v_1,v_2,...,v_n \end{Bmatrix},则用 \tiny \left | V \right | 表示图G中顶点的个数,\tiny E=\begin{Bmatrix} (u,v) | u \epsilon V,v \epsilon V \end{Bmatrix},用 \tiny | E| 表示图G中边的条数

有向图:有方向

        入度:\tiny ID(v)   出度:\tiny OD(v)   顶点的度为\tiny TD(v)=ID(v)+OD(v)   公式:\tiny \sum_{i=1}^{n}TD(v_i)=e  

无向图:无方向

        顶点的度为:   公式:\tiny \sum_{i=1}^{n}TD(v_i)=2e

多重图:①两点之间的边数大于1条,又通过一条边自身关联

完全图:任意顶点都有存在边

                无向:E取值\tiny n(n-1)/2  = \tiny C^2_n

                有向:E取值\tiny n(n-1) = \tiny 2C^2_n

 

 路径:--顶点\tiny V_p到顶点\tiny V_q之间的一条路径是指顶点序列

回路:--第一个顶点和最后一个顶点相同的路径称为回路或环

简单路径:--在路径序列,顶点不重复出现的路径

简单回路:--除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路

路径长度:--路径上的边数目

点到点的距离:--从顶点u出发到顶点v的最短路径若存在,则此路径的长度称u到v的路径,若不存在路径,则记该距离为无穷\tiny (\propto )


连通:点v到点w存在路径

强连通:点v到点w存在路径,和点w到点v也存在路径

连通图:任意两个顶点是连通的(存在路径)   

                n个顶点最少 n-1条边   非连通最多有\tiny C^{2}_{n-1}条边在+1就连通

强连通图:任意一个顶点之间是强连通的(存在路径)

                n个顶点最少 n条边

子图:原图其中几个顶点

生成子图:原图全部顶点。任意边连接 

连通分量(极大连通子图):子图必选连通,且包含尽可能多顶点和边

强连通分量(有向图的极大强连通子图):

生成树(极小连通子图):包含全部顶点,尽可能少的边   n-1条边

生成森林:非连通图中连通分量的生成树构成非连通的森林

边的权和网:边带权值

稀疏图:边很少的图       \tiny e< |V|log|V| 时视为稀疏图

稠密图:边很多的图       \tiny e\geqslant |V|log|V| 时视为稠密图

有向树:一个顶点入度为0,其余顶点入度均为1

 二、图的存储及其操作

*2.1邻接矩阵法

        二维数组存储图边的信息

#defind MaxVertexNum 100                        //顶点数目的最大值
typedef char VertexType;                        //顶点的数据类型
typedef int EdgeType;                           //带权图中边上权值的数据类型
typedef struct{                            
    VertexType Vex[MaxVertexNum];               //顶点图
    EdgeType Edge[MaxVertexNum][MaxVertexNum];  //邻接矩阵,边表
    int vexnum,arcnum;                          //图的当前顶点数和弧(边)数
}MGraph;

 *性质

        设图G的邻接矩阵为A,则\tiny A^n的元素\tiny A^n[i][j]等于由顶点i到顶点j的长度为n的路径数目

\tiny A^2[1][4]=a_1._1a_1._4+a_1._2a_2._4+a_1._3a_3._4+a_4._1a_4._4=1

\tiny A^2[2][2]=a_2._1a_1._2+a_2._2a_2._2+a_2._3a_3._2+a_2._4a_4._4=1

*2.2邻接表法

#define MaxVertexNum 100           //图中顶点数目的最大值
typedef struct ArcNode{            //边表结点
    int adjvex;                    //该边所指向的顶点的位置
    struct ArcNode *next;          //指向下一条边的指针
    int info;                      //权值
}RecNode;
typedef struct VNode{              //顶点表结点
    VertexTpye data;               //顶点的信息
    ArcNode *first;                //指向第一条依附该顶点的表指针
}VNode,AdjList[MaxVerTexNum];
typedef struct{
    AdjList vertices;              //邻接表
    int vexnum,arcnum;             //图顶点和边数
}ALGraph;

邻接表邻接矩阵
空间复杂度无向:\tiny O(V+2E) 有向:\tiny O(V+E)\tiny O(V^2)
适合用于存储稀疏图存储稠密图
表示方式不唯一唯一
计算度/出度/入度

计算度、出入度不方便,其他方便

必选遍历对应行和列
找相邻的边找有向图入边不方便,其他方便必选遍历对应行和列

 *3.3十字链表法存有向图

 空间复杂度 O(V+E)

出度---顺着绿色找

入度---顺着橙色找

*3.4邻接多重表存储无向图

  空间复杂度 O(V+E)

删除边和结点非常方便

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值