图定义和基本术语
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 V3
3 V4 4 V5
3
1^
4
2
4
3
2
0^
2
1^
G2的邻接表
邻接表: 求入度容易,求出度难
0^ 1^
12
7.3 图的遍历
图的遍历:从图的某顶点出发,访问所 有顶点,且每个顶点仅被访问一次。 两种遍历图的路径: 深度优先搜索和广度优先搜索 它们对无向图和有向图都适用 深度优先搜索类似于树的先根遍历 广度优先搜索类似于树的层次遍历
7.5 有向无环图及其应用 7.5.1 拓扑排序 7.5.2 关键路径
7.6 最短路径
7.6.1 从某个源点到其余各顶点的最短路径
2021/2/21 7.6.2 每一对顶点间的最短路径
2
第七章 图
图(Graph)是较线性表和树更为复杂的结构。
图中任意数据两个元素之间都可能相关。
G1 = (V1, { A1}) V1 = {v1,v2,v3,v4} A1 = {<v1,v2>,<v1,v3>,<v3,v4>,<v4,v1>}
4
V2
V3 7
V3
5
7.1 图的定义和基本术语(续二)
子图: G =(V,{E})和G1 = (V1,{E1}) 若V1属于V, E1属于E 则G1是G的子图
V1
V1
V1
V1
V2
V3
V3
V4
V3
V4
邻接点:无向图中有边相连的两个顶点互为邻接点
顶点的度:无向图中和某顶点相连的邻接点数
入度:有向图中指向某顶点的弧的数目
G2 = (V2, { E2}) V2 = {v1,v2,v3,v4,v5} E2 = {(v1,v2),(v1,v4),(v2,v3),(v2,v5) ,(v3,v4),(v3,v5)}
2021/2/21
3
7.1 图的定义和基本术语
有向图 G1
V1
V2
无向图 G2
V1
V2
V3
V4
V3
V4
V5
顶点 弧 弧尾 弧头
vexnum, arcnum;
int
kind;
2021/}2/2A1 LGraph;
11
邻接表的链式存储结构示意图
0 V1 1 V2 ^ 2 V3
3 V4
2
3^ 0^
G1的邻接表
0 V1
3^
1 V2
0^
2 V3
0^
3 V4
2^
2021/2/21 G1的逆邻接表
1^
邻接表: 求出度容易,求入度难
0 V1 1 V2
2021/2/21 出度:有向图中从某顶点出发的弧的数目
6
7.1 图的定义和基本术语(续三)
路径:两个顶点之间的顶点序列,该序列的每个顶点
与其前驱是邻接点,每个顶点与其后继也是邻接点
回路(环):第一顶点和最后顶点相同的路径
简单路径: 顶点不重复的路径
连通:
两个顶点之间有路径
连通图: 任意两个顶点之间有路径
2021/2/21
13
7.3.1 深度优先搜索
12345678 visited 1 1 0 1 1 0 0 1
V1
V2
V4
V5
பைடு நூலகம்V3
V6
V7
V1 V2 V4 V8 V5
stack
V8
遍历顺序:
V1 V2 V4 V8 V5 V3 V6 V7
非连通的图重复上述过程, 使每个顶点均被访问
2021/2/21
#define MAX_VERTEX_NUM 20
typedef enum{DG, DN, AG, AN} GraphKind;
typedef struct ArcCell{
VRType adj;
InfoType *info;
}ArcCell, AdjMatrix[MAX_VERTEX_NUM ][MAX_VERTEX_NUM ]
14
深度优先搜索算法
Boolean visited[MAX];
Status (* VisitFunc)(int v);
图定义和基本术语
2021/2/21
1
第七章 图
7.1 图的定义和基本术语
7.2 图的存储结构
7.2.1数组表示法 7.2.2邻接表 7.2.3十字链表 7.2.4邻接多重表
7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索
7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 最小生成树
顶点 边
2021/2/21
4
7.1 图的定义和基本术语(续一)
完全图:n个顶点有n(n-1)/2条边的无向图 有向完全图: n个顶点有n(n-1)条弧的有向图 稀疏图:有很少条边的图(如边数e < nlogn) 稠密图:非稀疏图 权: 与边或弧相关的数 网络: 带权的图
V1
2
V1
V2
2021/2/21
连通分量: 无向图中的极大连通子图。
强连通图:任意两个顶点之间有双向路径 强连通分量:有向图中的极大强连通子图。 连通图的生成树:极小连通子图。
不唯一,但n个顶点的生成树 有且仅有n-1条边。 生成森林:
2021/2/21
7
7.2 图的存储结构 7.2.1 数组表示法
#define INFINITY INT_MAX
typedef struct {
VetexType vexs[MAX_VERTEX_NUM ];
AdjMatrix arc;
int
vexnum, arcnum;
GraphKind kind;
}MGraph;
2021/2/21
8
数组表示法(邻接矩阵)
无向图、有向图、网均适用 易求各顶点的度。
例如有向图G1和无向图G2的邻接矩阵为
01 1 0
01010
G1.arc =
0 0
0 0
0 0
0 1
10101 G2.arc = 0 1 0 1 1
10 0 0
10100
01100
n2的存储量
无向图的邻接矩阵总是对称的--可以采用压缩存储
2021/2/21
9
网及其邻接矩阵
V1
3
V6 1
V5
5
V2
8
4
7
9
V3
6 5
5
V4
(a) 网
57 4 8 9 56 5 3 1
}ArcNode; typedef struct VNode{
VetexType data;
头结点 data firstarc
ArcNode *firstarc;
} Vnode, AdjList [MAX_VERTEX_NUM ];
typedef struct {
AdjList verteces;
int
(b) 邻接矩阵
2021/2/21
10
7.2.2 邻接表
--- 链式存储结构
#define MAX_VERTEX_NUM 20 typedef struct ArcNode{
表结点
int adjvex; struct ArcNode *nextarc;
Adjvex nextarc info
InfoType *info;
3 V4 4 V5
3
1^
4
2
4
3
2
0^
2
1^
G2的邻接表
邻接表: 求入度容易,求出度难
0^ 1^
12
7.3 图的遍历
图的遍历:从图的某顶点出发,访问所 有顶点,且每个顶点仅被访问一次。 两种遍历图的路径: 深度优先搜索和广度优先搜索 它们对无向图和有向图都适用 深度优先搜索类似于树的先根遍历 广度优先搜索类似于树的层次遍历
7.5 有向无环图及其应用 7.5.1 拓扑排序 7.5.2 关键路径
7.6 最短路径
7.6.1 从某个源点到其余各顶点的最短路径
2021/2/21 7.6.2 每一对顶点间的最短路径
2
第七章 图
图(Graph)是较线性表和树更为复杂的结构。
图中任意数据两个元素之间都可能相关。
G1 = (V1, { A1}) V1 = {v1,v2,v3,v4} A1 = {<v1,v2>,<v1,v3>,<v3,v4>,<v4,v1>}
4
V2
V3 7
V3
5
7.1 图的定义和基本术语(续二)
子图: G =(V,{E})和G1 = (V1,{E1}) 若V1属于V, E1属于E 则G1是G的子图
V1
V1
V1
V1
V2
V3
V3
V4
V3
V4
邻接点:无向图中有边相连的两个顶点互为邻接点
顶点的度:无向图中和某顶点相连的邻接点数
入度:有向图中指向某顶点的弧的数目
G2 = (V2, { E2}) V2 = {v1,v2,v3,v4,v5} E2 = {(v1,v2),(v1,v4),(v2,v3),(v2,v5) ,(v3,v4),(v3,v5)}
2021/2/21
3
7.1 图的定义和基本术语
有向图 G1
V1
V2
无向图 G2
V1
V2
V3
V4
V3
V4
V5
顶点 弧 弧尾 弧头
vexnum, arcnum;
int
kind;
2021/}2/2A1 LGraph;
11
邻接表的链式存储结构示意图
0 V1 1 V2 ^ 2 V3
3 V4
2
3^ 0^
G1的邻接表
0 V1
3^
1 V2
0^
2 V3
0^
3 V4
2^
2021/2/21 G1的逆邻接表
1^
邻接表: 求出度容易,求入度难
0 V1 1 V2
2021/2/21 出度:有向图中从某顶点出发的弧的数目
6
7.1 图的定义和基本术语(续三)
路径:两个顶点之间的顶点序列,该序列的每个顶点
与其前驱是邻接点,每个顶点与其后继也是邻接点
回路(环):第一顶点和最后顶点相同的路径
简单路径: 顶点不重复的路径
连通:
两个顶点之间有路径
连通图: 任意两个顶点之间有路径
2021/2/21
13
7.3.1 深度优先搜索
12345678 visited 1 1 0 1 1 0 0 1
V1
V2
V4
V5
பைடு நூலகம்V3
V6
V7
V1 V2 V4 V8 V5
stack
V8
遍历顺序:
V1 V2 V4 V8 V5 V3 V6 V7
非连通的图重复上述过程, 使每个顶点均被访问
2021/2/21
#define MAX_VERTEX_NUM 20
typedef enum{DG, DN, AG, AN} GraphKind;
typedef struct ArcCell{
VRType adj;
InfoType *info;
}ArcCell, AdjMatrix[MAX_VERTEX_NUM ][MAX_VERTEX_NUM ]
14
深度优先搜索算法
Boolean visited[MAX];
Status (* VisitFunc)(int v);
图定义和基本术语
2021/2/21
1
第七章 图
7.1 图的定义和基本术语
7.2 图的存储结构
7.2.1数组表示法 7.2.2邻接表 7.2.3十字链表 7.2.4邻接多重表
7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索
7.4 图的连通性问题 7.4.1 无向图的连通分量和生成树 7.4.2 最小生成树
顶点 边
2021/2/21
4
7.1 图的定义和基本术语(续一)
完全图:n个顶点有n(n-1)/2条边的无向图 有向完全图: n个顶点有n(n-1)条弧的有向图 稀疏图:有很少条边的图(如边数e < nlogn) 稠密图:非稀疏图 权: 与边或弧相关的数 网络: 带权的图
V1
2
V1
V2
2021/2/21
连通分量: 无向图中的极大连通子图。
强连通图:任意两个顶点之间有双向路径 强连通分量:有向图中的极大强连通子图。 连通图的生成树:极小连通子图。
不唯一,但n个顶点的生成树 有且仅有n-1条边。 生成森林:
2021/2/21
7
7.2 图的存储结构 7.2.1 数组表示法
#define INFINITY INT_MAX
typedef struct {
VetexType vexs[MAX_VERTEX_NUM ];
AdjMatrix arc;
int
vexnum, arcnum;
GraphKind kind;
}MGraph;
2021/2/21
8
数组表示法(邻接矩阵)
无向图、有向图、网均适用 易求各顶点的度。
例如有向图G1和无向图G2的邻接矩阵为
01 1 0
01010
G1.arc =
0 0
0 0
0 0
0 1
10101 G2.arc = 0 1 0 1 1
10 0 0
10100
01100
n2的存储量
无向图的邻接矩阵总是对称的--可以采用压缩存储
2021/2/21
9
网及其邻接矩阵
V1
3
V6 1
V5
5
V2
8
4
7
9
V3
6 5
5
V4
(a) 网
57 4 8 9 56 5 3 1
}ArcNode; typedef struct VNode{
VetexType data;
头结点 data firstarc
ArcNode *firstarc;
} Vnode, AdjList [MAX_VERTEX_NUM ];
typedef struct {
AdjList verteces;
int
(b) 邻接矩阵
2021/2/21
10
7.2.2 邻接表
--- 链式存储结构
#define MAX_VERTEX_NUM 20 typedef struct ArcNode{
表结点
int adjvex; struct ArcNode *nextarc;
Adjvex nextarc info
InfoType *info;