一、图的基本概念
1.1 基本图术语
-
有向图:图的边是有向边。记为 <v,w>:有向边从顶点v和顶点w的弧。表示v弧尾,w为弧头。
-
无向图:图的边是无向边。记为 (v,w):无向边从顶点v和顶点w的弧。v,w都表示顶点。
-
简单图:①不存在重复边②不存在顶点到自身的边
-
完全图:无向图中,每两个顶点之间都得有边。有向图中,每两个顶点之中都存在方向相反的两条弧
-
子图:就是一个整图的一部分,但是必须子图也是图。且也就是说边和顶点需要一起出现。
1.2 关于度的性质
- 无向图:几条边就是几个度(全部顶点的度的和等于边数的两倍)d=2e
- 有向图:某顶点的度=出度数+入度数(全部顶点的度=所有顶点出度+入度)
1.3 关于路径及距离
- 路径:从一个顶点到另一个顶点之间的一条顶点序列。(经过的点的序列)
- 路径长度:路径上边的数目。
- 回路/环:从第一个顶点到最后一个顶点相同的路径。
- 距离:从一个顶点到另一个顶点若存在最短路径,则称此路径长度为距离。
- 简单路径:顶点不重复出现的路径。
- 简单回路:顶点不重复出现的回路。
1.4 关于连通图及连通分量
该概念针对无向图
- 连通:从顶点v到顶点w有路径存在,则v和w是连通的
- 连通图:图G中,任意两个顶点是连通的,则称为连通图。边数大于等于n-1。
- 连通分量:无向图中极大连通子图成为连通分量。
- 极大连通子图:就是连通分量。子图尽可能多的包含的顶点和边。
- 极小连通子图:边数最少,图又连通的子图。
- 非连通图:图中有n个顶点,边数小于n-1,则为非连通图。
1.5 关于强连通图及强连通分量
该概念针对有向图
- 强连通:从顶点v到顶点w和从顶点w到顶点v之间都有路径。
- 强连通图:图中任意顶点都是强连通的。
- 强连通分量:有向图中的极大强连通子图。
1.6 生成树,生成森林
- 连通图的生成树是包含图中全部顶点的一个极小连通子图。
- 若图的顶点数为n,则它得生成树含有n-1条边。
- 若这棵树砍掉一条边,变为非连通图;这棵树加上一条边会变成回路。
- 非连通图中,连通分量的生成树就成为非连通图的生成森林。
1.7 经典例题
- 务必熟记有向图和无向图的完全图的边数两个公式
二、图的存储
2.1 邻接矩阵法
- 概念
- 用一维数组存储图中顶点信息。二维数组存储边的信息(各顶点之间的邻接关系)
#define MaxVertexNum 100 //顶点数目最大值
typedef char VertextType; //顶点的数据类型
typedef int EdgeType; //带权图中权值和数据类型
typedef struct{
VerTexTyoe Vex[MaxVertexNum]; //顶点表
EdgeType Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表
int vexnum,arcnum;//图的当前顶点数和弧数
}MGraph;
- 性质
- 邻接矩阵表示法的空间复杂度为 O(n²),n为顶点数}|V|
- 无向图的邻接矩阵中行或者列表示顶点的度
- 有向图的邻接矩阵中行表示出度,列表示入度。出度数加入度数才等于有向图的度
- 邻接矩阵的时间复杂度与顶点数有关。
- 稠密图适合邻接矩阵,
- 计算度和找边的关系必须进行遍历
2.2 邻接表法
- 概念
- 主要有两个部分组成,顶点表和边表。
- 边表:某个顶点依附的顶点。即出度
- 顶点表:某个图中所有的顶点。
#define MaxVertexNum 100
typedef struct ArcNode{ //图中顶点数目的最大值
int adjvex; //边表结点
struct ArcNode *next;//该弧所指向的顶点的位置
}ArcNode;
typedef struct VNode{ //顶点表结点
VerTexTyoe data;//顶点信息
ArcNode *first; //指向第一条依附该顶点的弧的指针
}VNode,AdjList[MaxVertexNum];
typedef struct{
AdjList vertices; //邻接表
int vexnum,arcnum;//图的顶点数和弧数
}ALGraph;
- 性质
- 若为 无向图,则所存储的空间为 O(V +2E);若为 有向图,则所存储空间为 O(V+E)。 (无向图需要存储两次边)
- 邻接表中给定一个顶点,出度很容易找,但是入度非常复杂。花费的时间为O(n)
- 图的邻接表表示法并不唯一,因为每个顶点对应的单链表,各边结点的链接次序可以任意。
- 适合稀疏图
2.3 十字链表法(考的少)
- 十字链表是有向图的一种链式存储结构。对于有向图每条弧有一个结点,对于每个顶点都有一个结点。
2.4 邻接多重表(考的少)
- 邻接多重表是无向图的另一种链式存储结构。
三、图的基本概念及存储常见考点
-
含有n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为 n²-2e
-
一个图的邻接矩阵表示唯一,邻接表表示不唯一
-
邻接表有奇数个边表结点,则图为有向图
-
在有向图的邻接表存储结构中,顶点v在边表中出现次数为顶点v的入度
-
n个顶点的无向图的邻接表最多有n(n-1)个边表结点。一个顶点n个n-1边表
-
n个顶点,e条边的有向图用邻接表表示,则删除某个顶点v相关的所有边的复杂度为 O(n+e)