0
点赞
收藏
分享

微信扫一扫

图(一)——基本概念和存储方式


基本概念

图的定义

图是由顶点的非空有穷集合顶点之间关系(边或弧)的集合构成的结构, 通常表示为
G = (V, E)
其中, V 为顶点集合, E 为关系(边或弧)的集合

如下图:

图(一)——基本概念和存储方式_有向图

注:1、树可以空,图不可以;

图的分类

图可以分为以下三类:

图(一)——基本概念和存储方式_无向图_02

名词术语

1、顶点的度:

依附于顶点vi的边的数目叫做顶点的度,记为TD(vi)

对于有向图而言, 有:
顶点的出度 :以顶点vi为出发点的边的数目,记为OD(vi);
顶点的入度 :以顶点vi为终止点的边的数目,记为ID(vi);
TD(vi) = OD(vi) + ID(vi)

关于顶点的度有如下结论:

1、对于具有n个顶点,e条边的图,有:

图(一)——基本概念和存储方式_图_03


2、具有n个顶点的无向图最多有n(n-1)/2条边。

3、具有n个顶点的有向图最多有n(n-1)条边。

边的数目达到最大的图称为完全图 ;边的数目达到或接近最大的图称为 稠密图,否则,称为 稀疏图

注:1、根据顶点数可以求出完全图的边数。

2、路径和路径长度

顶点vx到vy之间有路径P(vx,vy)的充分必要条件为:存在顶点序列 vx, vi1, vi2, …, vim, vy ,并且序列中相邻两个顶点构成的顶点偶对分别为图中的一条边

注:加粗部分的意思为 (vx,vi1), (vi1,vi2), … ,(vim,vy) 或<vx,vi1>, <vi1,vi2>, … ,<vim,vy> 都在E中。

如下图,A和E之间有两条路径:

图(一)——基本概念和存储方式_邻接矩阵_04


出发点与终止点相同的路径称为回路;顶点序列中顶点不重复出现的路径称为简单路径不带权的图的路径长度是指路径上所经过的边的数目带权图的路径长度是指路径上经过的边上的权值之和

3、子图

图(一)——基本概念和存储方式_邻接矩阵_05

4、图的连通

1、无向图的连通
无向图中顶点vi到vj 有路径,则称顶点vi与vj是连通的。若无向图中任意两个顶点都连通,则称该无向图是连通的。

连通分量 —— 无向图中的极大连通子图,如下图:

图(一)——基本概念和存储方式_邻接链表_06


注:1、是极大,不是最大;

2、有向图的连通
若有向图中顶点vi 到vj有路径,并且顶点vj到vi也有路径,则称顶点vi与vj是连通的。
若有向图中任意两个顶点都连通,则称该有向图是强连通的。

强连通分量 —— 有向图中的极大强连通子图,如下图:

图(一)——基本概念和存储方式_有向图_07

5、生成树

包含具有n个顶点的连通图G的全部n个顶点,仅包含其n-1条边极小连通子图称为G的一个生成树,如下图:

图(一)——基本概念和存储方式_图_08


注:1、是极小连通子图;

存储方式

对于一个图,需要存储的信息应该包括:
1、所有顶点的数据信息;
2、顶点之间关系(边或弧)的信息;
3、权的信息(对于网络);

邻接矩阵存储方法

核心思想::采用两个数组存储一个图,步骤如下:

图(一)——基本概念和存储方式_无向图_09


样例如下:

图(一)——基本概念和存储方式_有向图_10


邻接矩阵存储方式有如下特点:

图(一)——基本概念和存储方式_无向图_11

邻接表存储方法

核心思想:建立n个线性链表存储该图,步骤如下:

图(一)——基本概念和存储方式_邻接矩阵_12


样例如下:

图(一)——基本概念和存储方式_无向图_13


第i个链表中的每一个链结点(称之为边结点)表示以第i个顶点为出发点的一条边;邻接表存储方式有如下特点:

图(一)——基本概念和存储方式_邻接矩阵_14


邻接链表方式表示图实际统计的是结点的出度,如果统计入度,则叫逆邻接链表

C语言实现如下:

#define
typedef struct edge{
int adjvex;
int weight;
struct edge *next;
}ELink; //定义边结点类型
typedef struct ver{
vertype vertex;
ELink *link;
}VLink; //定义顶点结点类型
VLink G[MaxV];


举报

相关推荐

0 条评论