《数据结构-graph》PPT课件
合集下载
graph
图的定义(4)
×
限制: 1,不能有自身到自身的边 (即环)。 2,两个顶点v和w关联的边 不能多于一条(多重 图)。
×
C8
C1
C9
C4 C5
×
C7 C6
×
C3 C2
7.1.2
图的基本术语(1)
• 1) 顶点(vertex) 图中的数据元素。如图中的1、2、3、4或a、b、c、d。 • 2) 有向图(directed graph)
思考: 前面学习过的存储结构类型有哪些? 哪些适合图的存储?
7.2.1 图的存储结构-邻接矩阵(1)
1) 邻接矩阵(Adjacency Matrix)的定义 邻接矩阵(Adjacency Matrix)是表示顶点之间相邻关系的矩阵。设G=(V, E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵。包 含两个部分: • 记录各个顶点信息的顶点表, • 一个表示各个顶点之间关系的邻接矩阵。 设图 G = (V, E)是一个有 n 个顶点(按照0,1,2,…,n-1的顺序 编号)的图,则图的邻接矩阵是一个二维数组 arcs[n][n] : Arcs[i][j]= 1 0 如果<i, j>∈E 或者(i,j)∈E。 其他情况。
课堂练习:
【例1】 设图G=(V,E),V={a,b,c,d,e}, E={<a,b>,<a,c>,<b,d>,<c,e>,<d,c>,<e,d>。回答下列问题: ① 求与顶点b相关联的弧; ② 是否存在从顶点c到b的路径? ③ 求ID(d)、OD(d)、TD(d); ④ 画出各个强连通分量。
a
b c
11) 子图(subgraph) 设有两个图 G=(V, E) 和 G’=(V’, E’)。若 V’包含于 V 且 E’ 包含于E, 则称 图G’ 是 图G 的子图。
数据结构第七章图PPT课件
第7章 图
CAC - 2
CAC - 3
7.1 图的定义和术语
7.1.1 图的定义和术语
1. 图的定义(graph)
图G由两个集合构成,记作G=<V,E> ,其中V是顶点的非空有限集合,
E是顶点间关系----边的有限集合,边是顶点的无序对或有序对集合。 。
【例】 V0
V1
V2
V3
V4
无序对(vi,vj): 用连接顶点vi、vj的线段
V0
V1
V0
V1
V2
V3
V2
V3
两个强连通分量
CAC - 17
练习
具有n个顶点的强连通图至少有多少条边?是什么形状?
分析:强连通图是针对有向图而言的。由于强连通图要求 图中任何2个顶点之间能够连通,因此每个顶点至少要有一条 以该顶点为终点(弧头)和出发点(弧尾)的弧,每个顶点 的入度和出度至少各为1,即顶点的度至少为2。
边或弧
G2=<V2,E2> V2={ v0 ,v1,v2,v3 } E2={ <v0,v1 > , <v0,v2 >, <v2,v3 >,<v3,v0 > }
CAC - 6
7.1.1 图的定义和术语
2. 图的相关术语 (1)无向图:若图G中所有边是没有方向的,则称G为无向图。 (2)有向图:若图G中所有顶点间的连线是有方向的,则称G为有向图。 (3)顶点:数据元素Vi称为顶点。 (4)边和弧:P(Vi,Vj)表示在顶点Vi和Vj之间有线相连,如果是无向图, 则称该线为边;在有向图中,则称该连线为弧。边用顶点的无序偶对(Vi, Vj)表示,弧用有序偶对< Vi,Vj >表示。 (5)弧头和弧尾:有序偶对的第一个结点称为始点(或弧尾,即不带箭 头的一端),有序偶对的第二个结点称为终点(或弧头,即带箭头的一 端)。
CAC - 2
CAC - 3
7.1 图的定义和术语
7.1.1 图的定义和术语
1. 图的定义(graph)
图G由两个集合构成,记作G=<V,E> ,其中V是顶点的非空有限集合,
E是顶点间关系----边的有限集合,边是顶点的无序对或有序对集合。 。
【例】 V0
V1
V2
V3
V4
无序对(vi,vj): 用连接顶点vi、vj的线段
V0
V1
V0
V1
V2
V3
V2
V3
两个强连通分量
CAC - 17
练习
具有n个顶点的强连通图至少有多少条边?是什么形状?
分析:强连通图是针对有向图而言的。由于强连通图要求 图中任何2个顶点之间能够连通,因此每个顶点至少要有一条 以该顶点为终点(弧头)和出发点(弧尾)的弧,每个顶点 的入度和出度至少各为1,即顶点的度至少为2。
边或弧
G2=<V2,E2> V2={ v0 ,v1,v2,v3 } E2={ <v0,v1 > , <v0,v2 >, <v2,v3 >,<v3,v0 > }
CAC - 6
7.1.1 图的定义和术语
2. 图的相关术语 (1)无向图:若图G中所有边是没有方向的,则称G为无向图。 (2)有向图:若图G中所有顶点间的连线是有方向的,则称G为有向图。 (3)顶点:数据元素Vi称为顶点。 (4)边和弧:P(Vi,Vj)表示在顶点Vi和Vj之间有线相连,如果是无向图, 则称该线为边;在有向图中,则称该连线为弧。边用顶点的无序偶对(Vi, Vj)表示,弧用有序偶对< Vi,Vj >表示。 (5)弧头和弧尾:有序偶对的第一个结点称为始点(或弧尾,即不带箭 头的一端),有序偶对的第二个结点称为终点(或弧头,即带箭头的一 端)。
图(Graph)是一种比线性表和树更为复杂的数据结构在图形....ppt
网的邻接矩阵:
A[i][
j]
w i,j
若 vi ,v j 或(vi ,v j ) VR 反之
第七章
25
构造无向网的算法:
Status CreateUDN (MGraph &G){ //采用数组表示法(邻接矩阵) ,构造无向网G。
sacnf(&G,vexnum, &G.arcnum, &IncInfo); //IncInfo为0则各弧不含其它信息
例如:G1 = (V1, {R1})
其中:
A
V1={A, B, C, D, E}
R1={<A,B>, <A,E>,
B
E <B,C>, <C,D>, <D, A>,
<D, B >, <E,C> }
C
D
第七章
9
无向图
若<v, w>VR 必有<w, v>VR, 则称顶点 v 和顶点 w 之间存 在一条边(v,w) 。
生成树生成树第七章2072图的存储结构72图的存储结构一数组表示法邻接矩阵二邻接表存储表示三有向图的十字链表存储表示四无向图的邻接多重表存储表示第七章21用两个数组分别存储数据元素顶点的信息和数据元素之间的关系边或弧的信息
第七章 图
图(Graph)是一种比线性表和树更为复杂的数据结构。 在图形结构中,结点之间的关系可以是任意的,图中任意 两个数据元素之间都可能相关。在人工智能、工程、数学、 物理、化学、生物和计算机科学等领域中,图结构有着广 泛的应用。
//若弧含有相关信息,则输入 iGf .(aIrnccsI[i{nnj]ft[oiL)]=oIGncifapn.otaurtertVic(;(ise=*[xiG0(];M[.ija<]Gr;Gcrs.av[ipe]x[hjn]G.uinm,cfh;oia)+;r+u) )
A[i][
j]
w i,j
若 vi ,v j 或(vi ,v j ) VR 反之
第七章
25
构造无向网的算法:
Status CreateUDN (MGraph &G){ //采用数组表示法(邻接矩阵) ,构造无向网G。
sacnf(&G,vexnum, &G.arcnum, &IncInfo); //IncInfo为0则各弧不含其它信息
例如:G1 = (V1, {R1})
其中:
A
V1={A, B, C, D, E}
R1={<A,B>, <A,E>,
B
E <B,C>, <C,D>, <D, A>,
<D, B >, <E,C> }
C
D
第七章
9
无向图
若<v, w>VR 必有<w, v>VR, 则称顶点 v 和顶点 w 之间存 在一条边(v,w) 。
生成树生成树第七章2072图的存储结构72图的存储结构一数组表示法邻接矩阵二邻接表存储表示三有向图的十字链表存储表示四无向图的邻接多重表存储表示第七章21用两个数组分别存储数据元素顶点的信息和数据元素之间的关系边或弧的信息
第七章 图
图(Graph)是一种比线性表和树更为复杂的数据结构。 在图形结构中,结点之间的关系可以是任意的,图中任意 两个数据元素之间都可能相关。在人工智能、工程、数学、 物理、化学、生物和计算机科学等领域中,图结构有着广 泛的应用。
//若弧含有相关信息,则输入 iGf .(aIrnccsI[i{nnj]ft[oiL)]=oIGncifapn.otaurtertVic(;(ise=*[xiG0(];M[.ija<]Gr;Gcrs.av[ipe]x[hjn]G.uinm,cfh;oia)+;r+u) )
第06章图Graph-PPT精品文档
Example:
SFO HNL
ORD LGA
PVD
LAX
DFW
Graphs
MIA
3
Edge Types
Directed edge
ordered pair of vertices (u,v) first vertex u is the origin second vertex v is the destination e.g., a flight
a U c
V
b
Simple path
d P2
W f
P1 X h Z
e g Y
Examples
Graphs
7
Terminology (cont.)
Cycle
circular sequence of alternating vertices and edges each edge is preceded and followed by its endpoints
Байду номын сангаас
Printed circuit board Integrated circuit
Transportation networks
Highway network Flight network
Computer networks
U and V are the endpoints of a a, d, and b are incident on V U and V are adjacent X has degree 5 h and i are parallel edges j is a self-loop
数据结构图
0 1 2 3 4 m-1 V0 V1 V2 V3 V4 1 3
0 1
V0 V2 V3
V1
V4
2 4 3 4 0 2 1 2 该结点表示边 (V2,V4),其中的4是V4在一 维数组中的位置 第 18 页
7.2 图的存储结构
结点 adjvex next typedef struct ArcNode { int adjvex; // 邻接点域, // 存放与Vi邻接的点在表头数组中的位置 struct ArcNode *next; // 链域,下一条边或弧 } ArcNode; vexdata firstarc 表头结点 typedef struct tnode { VertexType vexdata; // 存放顶点信息 ArcNode * firstarc; // 指向第一个邻接点 } VNode, AdjList [ MAX_VERTEX_NUM ] ; typedef struct { AdjList vertices; int vexnum, arcnum; // 顶点数和弧数 int kind; // 图的种类 }
第 5 页
7.1 图的术语与定义
例如:
G2 = <V1,E1> V2 = { v0 ,v1,v2,v3,v4 } E2 = { (v0,v1), (v0,v3), (v1,v2), (v1,v4), (v2,v3), (v2,v4) }
V0 V2 V3 V4
第 6 页
V1
7.1 图的术语与定义
第 13 页
V1
V3
(a)
V4
V3
V4
(b)
7.1 图的术语与定义
连通分图(强连通分量)
0 1
V0 V2 V3
V1
V4
2 4 3 4 0 2 1 2 该结点表示边 (V2,V4),其中的4是V4在一 维数组中的位置 第 18 页
7.2 图的存储结构
结点 adjvex next typedef struct ArcNode { int adjvex; // 邻接点域, // 存放与Vi邻接的点在表头数组中的位置 struct ArcNode *next; // 链域,下一条边或弧 } ArcNode; vexdata firstarc 表头结点 typedef struct tnode { VertexType vexdata; // 存放顶点信息 ArcNode * firstarc; // 指向第一个邻接点 } VNode, AdjList [ MAX_VERTEX_NUM ] ; typedef struct { AdjList vertices; int vexnum, arcnum; // 顶点数和弧数 int kind; // 图的种类 }
第 5 页
7.1 图的术语与定义
例如:
G2 = <V1,E1> V2 = { v0 ,v1,v2,v3,v4 } E2 = { (v0,v1), (v0,v3), (v1,v2), (v1,v4), (v2,v3), (v2,v4) }
V0 V2 V3 V4
第 6 页
V1
7.1 图的术语与定义
第 13 页
V1
V3
(a)
V4
V3
V4
(b)
7.1 图的术语与定义
连通分图(强连通分量)
数据结构第5章图1
计顶点的入度,每统计
一个顶点,就要遍历所 0
有的边结点,其时间复 杂度为O(e)(e为图中边的
1
个数),从而统计所有顶 2
无向图的邻接矩阵是对称阵。
9/18/2019
《数据结构》国家精品课程
35
[例2]有向图的邻接矩阵
01234
V0
V1
0 01000
V2
1 10001 2 01010
V4
V3
3 10000 4 00010
9/18/2019
《数据结构》国家精品课程
36
[例3]权图的邻接矩阵
3
V0
V1
5
84
V2 2 V3
0123
0 03 5 8 1 30∞4 2 5∞ 0 2 3 8 4 20
9/18/2019
《数据结构》国家精品课程
37
借助邻接矩阵,可以很容易地求出图中顶点的度。 无向图 邻接矩阵的第i行(或第i列)的非零元素的 个数是顶点Vi的度。 有向图 邻接矩阵第i行的非零元素的个数为顶点Vi 的出度;第i列的非零元素的个数为顶点Vi的入度。
顶点的度=入度+出度。
9/18/2019
《数据结构》国家精品课程
13
设图G(可以为有向或无向图)共有n个顶点, e条边,若顶点vi的度数为D(vi),则
n1
Dvi 2e
i0
因为一条边关联两个顶点,而且使得这两个 顶点的度数分别增加1。因此顶点的度数之和 就是边的两倍。
9/18/2019
《数据结构》国家精品课程
32
1、 图的存储结构
邻接矩阵 邻接表(逆邻接表)
9/18/2019
《数据结构》国家精品课程
《数据结构图》课件
《数据结构图》PPT课件
欢迎来到《数据结构图》PPT课件!本课程将带您深入了解数据结构的定义、 常见类型以及应用领域。让我们一起开始探索这个精彩的主题吧!
概述
通过本节课,您将了解到数据结构的基本概念和作用。我们将探讨如何存储 和组织数据以及优化数据访问和操作的方法。
数据结构的定义
在这一节中,我们将介绍数据结构的定义,并探讨数据的抽象和表示方法。 了解数据结构的定义将有助于您理解数据在计算机中的常重要,因为不同的数据结构适用于不同的场景和数据操作需求。本节将深入 研究线性结构、树形结构和图形结构。
线性结构
线性结构是最简单且最常见的数据结构类型之一。我们将研究数组、链表和 栈等线性结构的特点、优点和缺点,并了解它们在实际应用中的使用情况。
树形结构
树形结构是一种层次化的数据结构,常用于表示层级关系。本节我们将探讨 二叉树、堆和AVL树等树形结构,并讨论它们在数据处理和搜索中的应用。
图形结构
图形结构是一种包含节点和边的数据结构,用于表示复杂的关联关系。本节我们将深入研究图的定义、遍历算 法和最短路径算法,并讨论图形结构在社交网络和地图导航中的应用。
数据结构的应用
数据结构是计算机科学领域中的核心概念,几乎应用于所有的软件开发领域。 本节我们将探讨数据结构在数据库、图形处理和算法设计中的实际应用。
数据结构图的设计原则
了解数据结构图的设计原则有助于我们创建清晰、易于理解的数据结构图。 本节我们将讨论数据结构图的设计原则,例如模块化、抽象和简洁性。
欢迎来到《数据结构图》PPT课件!本课程将带您深入了解数据结构的定义、 常见类型以及应用领域。让我们一起开始探索这个精彩的主题吧!
概述
通过本节课,您将了解到数据结构的基本概念和作用。我们将探讨如何存储 和组织数据以及优化数据访问和操作的方法。
数据结构的定义
在这一节中,我们将介绍数据结构的定义,并探讨数据的抽象和表示方法。 了解数据结构的定义将有助于您理解数据在计算机中的常重要,因为不同的数据结构适用于不同的场景和数据操作需求。本节将深入 研究线性结构、树形结构和图形结构。
线性结构
线性结构是最简单且最常见的数据结构类型之一。我们将研究数组、链表和 栈等线性结构的特点、优点和缺点,并了解它们在实际应用中的使用情况。
树形结构
树形结构是一种层次化的数据结构,常用于表示层级关系。本节我们将探讨 二叉树、堆和AVL树等树形结构,并讨论它们在数据处理和搜索中的应用。
图形结构
图形结构是一种包含节点和边的数据结构,用于表示复杂的关联关系。本节我们将深入研究图的定义、遍历算 法和最短路径算法,并讨论图形结构在社交网络和地图导航中的应用。
数据结构的应用
数据结构是计算机科学领域中的核心概念,几乎应用于所有的软件开发领域。 本节我们将探讨数据结构在数据库、图形处理和算法设计中的实际应用。
数据结构图的设计原则
了解数据结构图的设计原则有助于我们创建清晰、易于理解的数据结构图。 本节我们将讨论数据结构图的设计原则,例如模块化、抽象和简洁性。
第八章 图(Graph)PPT课件
Graph->Arcs[v][w] = 0; }
15
2、邻接表 (Adjacency List)表示法
实际上是一种顺序存储与链式存储相结合的方法。顺序存储 部分用来存储图中顶点的信息,链式部分用来保存图中边 (弧)的信息。
一个一维数组,每个数据元素包含以下信息:
Vertex FirstArc
邻接单链表的每个结点(边结点)的结构如下 AdjVertex Weight NextArc
16
# define MAXNODE <图中结点的最大个数>
typedef struct arc {
int AdjVertex; int Weight; struct arc * NextArc; }arctype; // 邻接链表结点结构
typedef struct {
elemtype Vertext; arctype * FirstArc; }vertextype; // 顺序表结构
在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。
12
网络的邻接矩阵 W (i,j), 如i果 !j且 <i,jE或 (i,j)E
A.Ed[i]gj[]e= , 否但 则i是 !,=j 0, 对角 i=线 j=
13
用邻接矩阵表示的图的类型的定义
#define MAXNODE 100
✓权 某些图的边具有与它相关的数, 称之为权。这 种带权图叫做网络。
8
7
10 2
5 9
1
12
63
8
15
76
6
3
4
16
7
施工进度图
60
A
B 40 80 C
30
15
2、邻接表 (Adjacency List)表示法
实际上是一种顺序存储与链式存储相结合的方法。顺序存储 部分用来存储图中顶点的信息,链式部分用来保存图中边 (弧)的信息。
一个一维数组,每个数据元素包含以下信息:
Vertex FirstArc
邻接单链表的每个结点(边结点)的结构如下 AdjVertex Weight NextArc
16
# define MAXNODE <图中结点的最大个数>
typedef struct arc {
int AdjVertex; int Weight; struct arc * NextArc; }arctype; // 邻接链表结点结构
typedef struct {
elemtype Vertext; arctype * FirstArc; }vertextype; // 顺序表结构
在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。
12
网络的邻接矩阵 W (i,j), 如i果 !j且 <i,jE或 (i,j)E
A.Ed[i]gj[]e= , 否但 则i是 !,=j 0, 对角 i=线 j=
13
用邻接矩阵表示的图的类型的定义
#define MAXNODE 100
✓权 某些图的边具有与它相关的数, 称之为权。这 种带权图叫做网络。
8
7
10 2
5 9
1
12
63
8
15
76
6
3
4
16
7
施工进度图
60
A
B 40 80 C
30
第7章图(Graph)
• 2e= • 例:
1 1
TD(v )
i 1 i
n
2 2
• 2*1=1+1
2*2=2+2
• (5)路径与回路:路径上边的数目称为路径长度。 • 下图所示的无向图中,顶点v1到顶点v5的路径有两条,分别 为(v1,v2,v3,v5)与(v1,v4,v5),路径长度分别为3和2。
1 2 5 3
• 如果路径的起点和终点相同 (即vp=vq),则称此路径为回路 4 或环。序列中顶点不重复出现的路径称为简单路径, 图 7.3 图的路径 • 上图所示的v1到v5的两条路径都为简单路径。除第一顶点与 最后一个顶点之外,其它顶点不重复出现的回路为简单回路 或者简单环。
v i v j
2 1 1 3 3
图 G1 图 7.1 图的示例
4
2
图 G2
如果使用集合的表示方法,图7.1中的两个图可以用如下方法表示: 1. 图G1: G1=(V1,E1); 其中顶点集 V1={v1,v2,v3,v4}; 其中边集 E1={( v1,v2),(v1,v3),(v2,v3),(v1,v4), (v3,v4)} 2. 图G2: G2=(V2,E2) 其中顶点集 V2={ v1,v2,v3}; 其中弧集 E2={< v1,v2>,< v1,v3>,< v2,v3>, < v3,v2>} 如果图中所有的边都是无向边,那么该图叫做无向图(undirected graph),图7.1中图G1就是无向图。 如果所有边都是有向的,那么该图叫做有向图(directed graph), 图7.1中G2是一个有向图。
1 2
• 1.带方向的边叫有向边(directed edge),简 称为弧; • 用顶点的有序对表示,<vi ,vj>和<vj ,vi> 是不同的 . • 2. 而不带方向的边叫无向边(undirected edge),简称为边。 • 用顶点的无序对表示,(vi ,vj)和(vj ,vi)表 示同一条边。 • • <vi,vj >表示从顶点vi到vj 的一段弧 • Vi:称为边的始点或者弧尾 • Vj:称为边的终点或者弧头
1 1
TD(v )
i 1 i
n
2 2
• 2*1=1+1
2*2=2+2
• (5)路径与回路:路径上边的数目称为路径长度。 • 下图所示的无向图中,顶点v1到顶点v5的路径有两条,分别 为(v1,v2,v3,v5)与(v1,v4,v5),路径长度分别为3和2。
1 2 5 3
• 如果路径的起点和终点相同 (即vp=vq),则称此路径为回路 4 或环。序列中顶点不重复出现的路径称为简单路径, 图 7.3 图的路径 • 上图所示的v1到v5的两条路径都为简单路径。除第一顶点与 最后一个顶点之外,其它顶点不重复出现的回路为简单回路 或者简单环。
v i v j
2 1 1 3 3
图 G1 图 7.1 图的示例
4
2
图 G2
如果使用集合的表示方法,图7.1中的两个图可以用如下方法表示: 1. 图G1: G1=(V1,E1); 其中顶点集 V1={v1,v2,v3,v4}; 其中边集 E1={( v1,v2),(v1,v3),(v2,v3),(v1,v4), (v3,v4)} 2. 图G2: G2=(V2,E2) 其中顶点集 V2={ v1,v2,v3}; 其中弧集 E2={< v1,v2>,< v1,v3>,< v2,v3>, < v3,v2>} 如果图中所有的边都是无向边,那么该图叫做无向图(undirected graph),图7.1中图G1就是无向图。 如果所有边都是有向的,那么该图叫做有向图(directed graph), 图7.1中G2是一个有向图。
1 2
• 1.带方向的边叫有向边(directed edge),简 称为弧; • 用顶点的有序对表示,<vi ,vj>和<vj ,vi> 是不同的 . • 2. 而不带方向的边叫无向边(undirected edge),简称为边。 • 用顶点的无序对表示,(vi ,vj)和(vj ,vi)表 示同一条边。 • • <vi,vj >表示从顶点vi到vj 的一段弧 • Vi:称为边的始点或者弧尾 • Vj:称为边的终点或者弧头
数据结构图结构-(动态PPT)
2
3
1
*
图的术语
完全图 边达到最大的图
无向完全图:具有n(n-1)/2条边的简单图称为无向完全图 有向完全图:具有n(n-1)条边的有向图。 稀疏图: 边或弧很少的图。 稠密图: 边或弧很多的图。 权:与图的边或弧相关的数。 网:边或弧上带有权值的图。
*
图的术语
路径长度:路径上边或弧的数目
路径 非空有限点、弧交替序列,
1.无向图邻接表
2
5
3
4
1
1 2 3 4 5
G2
1
2
3
4
5
adjvex nextarc
vexdata firstarc
*
2.有向图邻接表
2
3
4
1
4
3
1
2
1 2 3 4
如图G1的邻接表为:
G1
1
2
3
4
*
在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。
设图中有 n 个顶点,e 条边,则用邻接表表示无向图时,需要 n 个顶点结点,2e 个边结点;用邻接表表示有向图时,若不考虑逆邻接表,只需 n 个顶点结点,e 个边结点。
04
03
G2
*
图的术语
证明:对有向图,每个顶点至多有n-1条边与其它的n-1个顶点相连,则n个顶点至多有n(n-1)条边。但对无向图,每条边连接2个顶点,故最多为n(n-1)/2
02
设n为顶点数,e为边或弧的条数 对无向图有:0 ≤ e ≤ n(n-1)/2 有向图有:0≤ e ≤ n(n-1)
回路:无重复边的闭路径。
回路但不是环
*
图的术语
01
3
1
*
图的术语
完全图 边达到最大的图
无向完全图:具有n(n-1)/2条边的简单图称为无向完全图 有向完全图:具有n(n-1)条边的有向图。 稀疏图: 边或弧很少的图。 稠密图: 边或弧很多的图。 权:与图的边或弧相关的数。 网:边或弧上带有权值的图。
*
图的术语
路径长度:路径上边或弧的数目
路径 非空有限点、弧交替序列,
1.无向图邻接表
2
5
3
4
1
1 2 3 4 5
G2
1
2
3
4
5
adjvex nextarc
vexdata firstarc
*
2.有向图邻接表
2
3
4
1
4
3
1
2
1 2 3 4
如图G1的邻接表为:
G1
1
2
3
4
*
在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。
设图中有 n 个顶点,e 条边,则用邻接表表示无向图时,需要 n 个顶点结点,2e 个边结点;用邻接表表示有向图时,若不考虑逆邻接表,只需 n 个顶点结点,e 个边结点。
04
03
G2
*
图的术语
证明:对有向图,每个顶点至多有n-1条边与其它的n-1个顶点相连,则n个顶点至多有n(n-1)条边。但对无向图,每条边连接2个顶点,故最多为n(n-1)/2
02
设n为顶点数,e为边或弧的条数 对无向图有:0 ≤ e ≤ n(n-1)/2 有向图有:0≤ e ≤ n(n-1)
回路:无重复边的闭路径。
回路但不是环
*
图的术语
01
数据结构PPT课件精品 图2(ppt文档)
B 0 03 5 8
5 8 4 1 30∞4
C 2D
2 5∞ 0 2 3 8 4 20
⑤ 删除顶点Vertex
算法思想:不仅要从顶点链表中删除该顶点, 还需要删除该顶点所发出的边以及 所有的入边,即在邻接矩阵中删除 相应的行和列。
template<class T> Void Graph<T>::DeleteVertex(const T& vertex) {
● Graph类的实现 ① 构造函数
template<class T> Graph<T> :: Graph( const int sz = Default )
graphsize( 0 ), MaxGraphSize( sz ), NumEdge( 0 ) { int n , e , weight ; T name , from , to ;
for (row=pos+1;row<=graphsize; row++) for(col=pos+1; col<= graphsize; col++) edge[row-1][col-1]= edge[row][col];
}
有向图的逆邻接表
V0
V1
0 V0
V2 1 V1
2 V2 ∧
V4
V3
3 V3
int edge[ MaxGraphSize ][ MaxGraphSize ] ; //邻接矩阵
int graphsize ; //当前顶点数
//当前边数
int CurrentEdges ;
//检查顶点vertex是否已在顶点表L中 int FindVertex( SeqList<T> & L ,