目录
*一、基本概念
由顶点V和边E组成,记为,其中
表示G中顶点的有限非空集;
表示G中顶点之间的关系(边)集合,若
,则用
表示图G中顶点的个数,
,用
表示图G中边的条数
有向图:有方向
入度: 出度:
顶点的度为:
公式:
无向图:无方向
顶点的度为: 公式:
多重图:①两点之间的边数大于1条,又通过一条边自身关联
完全图:任意顶点都有存在边
无向:E取值 =
有向:E取值 =
路径:--顶点到顶点
之间的一条路径是指顶点序列
回路:--第一个顶点和最后一个顶点相同的路径称为回路或环
简单路径:--在路径序列,顶点不重复出现的路径
简单回路:--除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路
路径长度:--路径上的边数目
点到点的距离:--从顶点u出发到顶点v的最短路径若存在,则此路径的长度称u到v的路径,若不存在路径,则记该距离为无穷
连通:点v到点w存在路径
强连通:点v到点w存在路径,和点w到点v也存在路径
连通图:任意两个顶点是连通的(存在路径)
n个顶点最少 n-1条边 非连通最多有条边在+1就连通
强连通图:任意一个顶点之间是强连通的(存在路径)
n个顶点最少 n条边
子图:原图其中几个顶点
生成子图:原图全部顶点。任意边连接
连通分量(极大连通子图):子图必选连通,且包含尽可能多顶点和边
强连通分量(有向图的极大强连通子图):
生成树(极小连通子图):包含全部顶点,尽可能少的边 n-1条边
生成森林:非连通图中连通分量的生成树构成非连通的森林
边的权和网:边带权值
稀疏图:边很少的图 时视为稀疏图
稠密图:边很多的图 时视为稠密图
有向树:一个顶点入度为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,则的元素
等于由顶点i到顶点j的长度为n的路径数目
*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;
邻接表 | 邻接矩阵 | |
空间复杂度 | 无向: | |
适合用于 | 存储稀疏图 | 存储稠密图 |
表示方式 | 不唯一 | 唯一 |
计算度/出度/入度 | 计算度、出入度不方便,其他方便 | 必选遍历对应行和列 |
找相邻的边 | 找有向图入边不方便,其他方便 | 必选遍历对应行和列 |
*3.3十字链表法存有向图
空间复杂度 O(V+E)
出度---顺着绿色找
入度---顺着橙色找
*3.4邻接多重表存储无向图
空间复杂度 O(V+E)
删除边和结点非常方便