一.图的概念
图是由顶点结点集V和边集E组成,记为G=(V,E)
V
=
{
v
1
,
v
2
,
.
.
.
,
v
n
}
E
=
{
(
u
,
v
)
∣
u
∈
V
,
v
∈
V
}
V=\{v_1,v_2,...,v_n\} \qquad E=\{(u,v)|u\in V,v\in V\}
V={v1,v2,...,vn}E={(u,v)∣u∈V,v∈V}
V(G):图G中顶点的有限非空集。 |V|:顶点数
E(G):图G中边集。
\qquad\qquad\quad
|E|:边数
1.图的类型
有向图 | 弧:<v,w>,从弧头v到弧尾w的弧 从v邻接到w |
无向图 | 边 :(v,w) |
简单图 | 1.无重复边 2.不存在顶点到自身的边 |
多重图 | 允许上面两点 |
完全图 (简单完全图) | 无向图:
C
n
2
=
n
(
n
−
1
)
2
C_n^2=\frac{n(n-1)}{2}
Cn2=2n(n−1) 条边 有向图:2 C n 2 C_n^2 Cn2 条边 \qquad\quad\;\; |
子图 | V’
∈
\in
∈V , E’
∈
\in
∈ E,且G‘=(V’,E’)是图 则G’是G的子图 |
2.连通图:
连通图 (无向图) | 任意两个顶点是连通的 v,w存在路径 ( v . . . , v i , . . . w ) (v...,v_i,...w) (v...,vi,...w) (n个点的连通图,至少n-1条边 如果有n条边,一定有环) |
极大连通子图 | 即联通分量,包含连通的所有的边 |
极小连通子图 | 包含最少的边 |
强连通图 (有向图) | 任意两个顶点是连通的 v存在 ( v . . . , v i , . . . w ) (v...,v_i,...w) (v...,vi,...w) 、 ( w . . . , w i , . . . v ) (w...,w_i,...v) (w...,wi,...v) 的路径 (任意一个点,一个回路都是强连通图) |
极大强连通子图 | 即强连通分量,包含所有连通的边 (n个点的强连通子图,至少n条边,环) |
生成树 (连通图) | 连通图的生成树
→
\rightarrow
→包含所有顶点的极小连通子图 n个顶点,n-1条边 |
生成森林 (非联通图) | 所有连通分量的生成树,构成生成森林 |
3.点、边、路径、回路:
(顶点的)度 | 依附于该顶点的边的数目,TD(v) |
入度 | 以该顶点为终点 的有向边的数目ID(v) |
出度 | 以该顶点为起点 的有向边的数目OD(v) |
度 = 入度 + 出度 入度之和 = 出度之和 = e | |
权 | 边上带有权值 → \rightarrow →带权图 → \rightarrow →网 |
路径 | 顶点+相关的边 |
路径长度 | 无权图:路径上边的数目 带权图:路径上边的权值之和 |
回路 | 第一个顶点和最后一个顶点相同的路径
→
\rightarrow
→回路在 如:a,b,c,…,a 回路一定是连通的(任意两点均可达) |
简单路径 | 顶点不重复出现的路径(无回路) |
简单回路 | 除第一个顶点和最后一个顶点外,其他顶点不重复出现 即整个是一个环 |
距离 | 最短路径的路径长度 |
有向树 | 一个顶点入度为0,其余顶点入度为1的有向图 |
概念易错点:
- 若连通无向图有n个顶点,则边至少 C n − 1 2 + 1 C_{n-1}^2+1 Cn−12+1条
- V’ ∈ \in ∈V,E’ ∈ \in ∈E,V’和E’不一定是G的子图!因为V’和E’不一定相关联!
- 无向图有n个顶点,n条边,则一定有环
二.图的存储
1.邻接矩阵法
适用:无向图+有向图。——稠密图
定义:用一个一维数组存储顶点信息,用一个二维数组存储边的信息——即各顶点之间的邻接关系(该二维数组记为邻接矩阵)
无权图:
无向图:若存在(
v
i
,
v
j
v_i,v_j
vi,vj),则A[i][j]=1,A[j][i]=1
\qquad\quad\;
若不存在,A[i][j]=A[j][i]=0
有向图:若存在<
v
i
,
v
j
v_i,v_j
vi,vj>,则A[i][j]=1
\qquad\quad\;
若不存在,A[i][j]=0
带权图:
存在,则值位权值
不存在,一般对角线全为 0;其他的边为
∞
\infty
∞
//邻接矩阵法
typedef struct {
char vex[Maxsize]; //储存顶点的一维数组
int edge[Maxsize][Maxsize]; //储存边的二维数组
int vexnum, arcnum; //顶点数目,边数目
}MGraph;
2.邻接表法
适用:无向图+有向图——稀疏图