数据结构-chap7 (1)图的存储结构

合集下载

数据结构 图的存储表示

数据结构 图的存储表示

数据结构图的存储表示在计算机科学中,数据结构是组织和存储数据的方式,以便能够有效地进行操作和处理。

图是一种常见且重要的数据结构,用于表示对象之间的关系。

而要有效地处理图,首先需要选择合适的存储表示方式。

图是由顶点(vertex)和边(edge)组成的。

顶点表示对象,边表示顶点之间的关系。

根据边是否有方向,图可以分为有向图和无向图。

对于图的存储,主要有以下几种常见的方式。

邻接矩阵是一种直观且简单的存储方式。

假设有 n 个顶点,我们就创建一个 n×n 的矩阵。

如果顶点 i 和顶点 j 之间有边相连,那么矩阵中第i 行第j 列的元素就为1;如果无边相连,则为0。

对于有权重的图,这个元素的值可以是边的权重。

邻接矩阵的优点是查询顶点之间是否有边相连非常快速,时间复杂度为 O(1)。

但它的缺点也很明显,不管图是否稀疏,都需要存储 n×n 个元素,空间复杂度较高。

邻接表则是一种更节省空间的存储方式,尤其对于稀疏图。

对于每个顶点,我们使用一个链表来存储与其相邻的顶点。

这样,对于一个顶点,我们只需要存储与其有边相连的顶点,大大节省了空间。

在查找一个顶点的相邻顶点时,时间复杂度与顶点的度成正比,平均情况下时间复杂度较好。

十字链表是专门为有向图设计的一种存储结构。

它结合了邻接表和逆邻接表的特点,既能方便地找到一个顶点的出边,又能找到入边。

邻接多重表则主要用于无向图的存储,解决了在邻接表中删除和插入边操作复杂的问题。

在实际应用中,选择哪种存储方式取决于图的特点和具体的操作需求。

如果图比较稠密,且经常需要快速判断两个顶点之间是否有边,邻接矩阵可能是较好的选择。

而如果图比较稀疏,邻接表通常能节省更多的空间。

比如说在社交网络中,人与人之间的关系可以用图来表示。

如果我们想要快速了解一个人的直接好友(即与其有直接联系的人),可能会选择邻接表。

因为社交网络中的关系通常比较稀疏,邻接表能节省大量空间,而且查找好友的操作也比较高效。

数据结构7-图 完整版

数据结构7-图 完整版
A E C D B
其中: V2={A, B, C, D, E} VR2={(A,B),(A,C),(E,C), (E,D),(D,B) }
5
有向图、无向图示例
A D C
G1
B
1 3
2 4 6
G2
E
5
下列形式的图本章不作讨论
6
完全图、稀疏图与稠密图
n:图中顶点的个数; e:图中边或弧的数目。
2
1 0 3 (a) 1 2 3 (b) 0
q图的应用广泛:
ü ü ü
电路网络分析、交通运输、管理与线路的铺设 印刷电路板与集成电路的布线、社会网络、WEB链接图 工程进度的安排、课程表的制订、关系数据库的设计
2
7.1 图的定义和术语 一、图的结构定义:
q 图是由一个顶点集 V 和一个顶点间的关系集合弧集VR
(边的集合)构成的数据结构。
ü 可以用二元组定义为: Graph = (V, VR ) ü 其中,VR={<v,w>| v,w∈V 且 P(v,w)} ü 谓词 P(v,w) 定义了弧 <v,w>的意义或信息。
T5,T6不是有向树
22
● 有向图的生成树/生成森林:
含有图的全部顶点,但只有足以构成若干互不相交的有向树的弧。
A F
B E
G
C D
A F
B E
F1
C D
A
D B
F2

F E
C
A F
B E
T1
C D

D C B
T2
A E A F E
T3
D B C
F
23
图的抽象数据类型定义
q

数据结构的四种存储结构

数据结构的四种存储结构

数据结构的存储结构通常可以分为以下四种类型:1. 顺序存储结构(Sequential Storage Structure):顺序存储结构是将数据元素存储在一块连续的存储空间中。

每个元素占据一段连续的内存空间,并且相邻元素之间在内存中也是相邻的。

数组就是一种典型的顺序存储结构,可以通过下标来直接访问元素。

顺序存储结构的特点是随机访问速度快,但插入和删除操作需要移动大量元素。

2. 链式存储结构(Linked Storage Structure):链式存储结构通过节点之间的指针连接来存储数据元素。

每个节点包含数据和指向下一个节点的指针,最后一个节点的指针为空。

链式存储结构的特点是插入和删除操作方便快捷,不需要移动元素,但访问元素需要遍历链表。

3. 索引存储结构(Indexed Storage Structure):索引存储结构使用一个索引表来存储数据元素的地址或者指针。

索引表中的每个条目包含一个关键字和对应数据元素的地址或指针。

通过索引表可以快速定位和访问数据元素,而无需遍历整个数据集。

索引存储结构适用于静态数据集或者数据集更新较少的情况。

4. 散列存储结构(Hashed Storage Structure):散列存储结构使用散列函数将数据元素的关键字映射为存储位置。

存储位置可以是数组或者其他数据结构,称为散列表。

通过散列函数,可以直接计算出数据元素的存储位置,从而实现快速的插入、查找和删除操作。

散列存储结构适用于需要快速查找和访问数据的情况,但可能存在散列冲突的问题,需要解决冲突并保证散列函数的均匀性。

这些存储结构可以根据具体的应用场景和需求选择使用,每种结构都有其适用的优势和限制。

数据结构图的存储结构及基本操作

数据结构图的存储结构及基本操作

数据结构图的存储结构及基本操作数据结构图的存储结构及基本操作1·引言数据结构图是一种用来描述数据元素之间关系的图形结构,它可以表示实体之间的联系和依赖关系。

本文将介绍数据结构图的存储结构及基本操作。

2·存储结构2·1 邻接矩阵邻接矩阵是使用二维数组来表示数据结构图中各个节点之间的关系。

矩阵的行和列代表节点,如果两个节点之间存在边,则矩阵相应位置的值为1,否则为0。

2·2 邻接表邻接表是使用链表来表示数据结构图中各个节点之间的关系。

每个节点都有一个链表,链表中的每个元素表示与该节点相邻的节点。

2·3 十字链表十字链表是使用链表来表示数据结构图中各个节点之间的关系。

每个节点都有两个链表,一个表示该节点指向的节点,另一个表示指向该节点的节点。

2·4 邻接多重表邻接多重表是使用链表来表示数据结构图中各个节点之间的关系。

每个节点都有一个链表,链表中的每个元素表示与该节点相邻的边。

3·基本操作3·1 创建图创建一个空的数据结构图,根据需要选择适当的存储结构。

3·2 插入节点在数据结构图中插入一个节点,并建立与其他节点的关系。

3·3 删除节点从数据结构图中删除一个节点,并删除与其他节点的关系。

3·4 插入边在数据结构图中插入一条边,连接两个节点。

3·5 删除边从数据结构图中删除一条边,断开两个节点的连接。

3·6 遍历图按照某种规则遍历整个数据结构图,访问每个节点。

本文档涉及附件:无本文所涉及的法律名词及注释:1·邻接矩阵:用于表示图的存储结构,矩阵的行和列代表图的节点,矩阵的值表示节点之间的连接关系。

2·邻接表:用于表示图的存储结构,每个节点都有一个链表,链表中的每个元素表示与该节点相邻的节点。

3·十字链表:用于表示图的存储结构,每个节点都有两个链表,一个表示该节点指向的节点,另一个表示指向该节点的节点。

数据结构 Chap7 图

数据结构 Chap7 图
弧尾,w 为弧头。
谓词 P(v,w) 定义了弧 <v,w>的意义或信息。
2
二、图的相关概念
由于“弧”是有方向的,因此称由顶点集 和弧集构成的图为有向图。
例如: G1 = (V1, VR1)
A
其中
V1={A, B, C, D, E}
B
E VR1={<A,B>, <A,E>,
C
D
<B,C>, <C,D>, <D,B>, <D,A>, <E,C> } 3
D
1 11
2 7∧
有向网
E
3 21 ∧
28
邻接表存储结构C语言类型描述
#define MAX_V 20 typedef enum{DG, DN, UDG, UDN} GraphKind; typedef struct ArcNode{
int adjvex; OtherInfo info; struct ArcNode *nextarc; } ArcNode;/*弧的类型*/
B A
F
C D
E
对非连通图,则称由 各个连通分量的生成 树的集合为此非连通 图的生成森林。
13
三、图的抽象数据类型定义
ADT Graph { 数据对象V:一个集合,该集合中的所有元素
具有相同的特性。 数据关系R:R={VR}
VR={<x,y>∣P(x,y)∧(x,y∈V)} 基本操作: }
基本操作
7.1 抽象数据类型图的定义 7.2 图的存储表示
7.3 图的遍历 7.4 最小生成树
7.5 两点之间的最短路径问题
7.6 拓扑排序

数据结构第七章1

数据结构第七章1

} ADT Graph
详见p156~157。
7.2 图的存储结构
图的存储结构比较复杂,其复杂性主要表现在:
◆ 任意顶点之间可能存在联系,无法以数据元素 在存储区中的物理位置来表示元素之间的关系。
◆ 图中顶点的度不一样,有的可能相差很大,若 按度数最大的顶点设计结构,则会浪费很多存储单 元,反之按每个顶点自己的度设计不同的结构,又 会影响操作。 图的常用的存储结构有:邻接矩阵、邻接链表、十 字链表、邻接多重表。
图7-8 带权有向图的数组存储
⑶ 有向图邻接矩阵的特性
有向完全图:对于有向图,若图中顶点数为n ,
用e表示弧的数目,则e[0,n(n-1)] 。具有n(n-1)条边的 有向图称为有向完全图。
完全有向图另外的定义是:
对于有向图G=(V,E),若vi,vjV ,当vi ≠vj时, 有<vi ,vj>E∧<vj , vi >E ,即图中任意两个不同的顶点 间都有一条弧,这样的有向图称为有向完全图。 有很少边或弧的图(e<n㏒n)的图称为稀疏图,反 之称为稠密图。
wij 若<vi,vj>E,即vi , vj邻接,权值为wij
∞ 若<vi,vj>E,即vi , vj不邻接时
a
2
6 3 1
b 3
4 5
e
c
d
vexs a b c d e
(b) 顶点矩阵
∞ ∞ ∞ ∞ ∞
6 2 ∞∞ 3 ∞ 4 ∞ ∞∞
∞ ∞ 1 ∞ ∞
∞ 3 ∞ 5 (v,v’)E,则称顶点v和v’ 互为邻接点,即v和w相 邻接。边(v,v’)依附(incident)与顶点v和v’ 。
对于有向图G=(V ,E),若有向弧<v,w>E,则称 顶点v “邻接到”顶点w,顶点w “邻接自”顶点v ,弧 <v,w> 与顶点v和w “相关联” 。

《数据结构》第07章图结构

《数据结构》第07章图结构

∑ ID(v ) = ∑ OD(v ) = e
i =1 i i =1 i
n
n
权是一个数值量, 权:权是一个数值量,是某些信息的数字化抽象 。权分边权与结点权,分别是边与结点的问题世 权分边权与结点权, 界所关心的信息的数值化表示。例如, 界所关心的信息的数值化表示。例如,若结点代 表城市,则边权可代表城市之间的交通费用。 表城市,则边权可代表城市之间的交通费用。
2011年9月28日星期三 年 月 日星期三
算法与数据结构 第七章 图结构
9
暂不讨论
2011年9月28日星期三 年 月 日星期三
算法与数据结构 第七章 图结构
10
7.1 图的基本概念
V1 V3 V4 V1 V5 V2 若从顶点 i到vj的边有方向,则称这 若从顶点v 的边有方向, 条边为有向边 有向边。 条边为有向边。 如果图的任意两个顶点之间的边都 有向边,则称该图为有向图 有向图。 是有向边,则称该图为有向图。

TD
例:
V1 V3 V4
V2
i=1
(vi) = 2 e
握手定理
求该无向图各顶点的度数之和。 求该无向图各顶点的度数之和。 V5
算法与数据结构 第七章 图结构 14
2011年9月28日星期三 年 月 日星期三
7.1 图的基本概念
在有向图中, 顶点v的 入度是指以该顶点为弧头 在有向图中 , 顶点 的 入度 是指以该顶点为弧头 的弧的数目,记为ID (v);顶点 出度是指以该顶 出度是指以该顶 的弧的数目,记为 ;顶点v出度 点为弧尾的弧的数目,记为OD (v)。 点为弧尾的弧的数目,记为 。 在具有n个顶点 、 条边的有向图 条边的有向图G中 在具有 个顶点、 e条边的有向图 中 , 有下式成 个顶点 立:

《图的存储结构》PPT课件

《图的存储结构》PPT课件

(4)网的邻接矩阵
网的邻接矩阵可定义为:
wi,j 若<vi, vj>或(vi, vj) ∈VR A[i][j] =
∞ 反之
例如,下图列出了一个有向网和它的邻接矩阵。
V1
5
V2
5 7
3
84
4
V6
79
V3
8 9 5 6
1
6
V5
5
5
5
V4
3 1
(a) 网N
精选ppt (b) 邻接矩阵
7
(5)图的构造
01

2 1∧
精选ppt
2 0∧∧
0 2∧∧
19
(3)C语言描述
#define MAX_VERTEX_NUM 20
typedef struct ArcBox {
int
tailvex, headvex;
//该弧的尾和头顶点的位置
struct ArcBox * hlink, * tlink;
//分别为弧头相同和弧尾相同的弧的链域
精选ppt
14
在无向图的邻接表中, 顶点Vi的度恰为第i个
B
链表中的结点数。
A
0A 1 4
1B 0 4 5
F
2C 3 5
3D 2 5
4E 0 1
5F
1
2 3 精选ppt
C D
E
15
有向图的邻接表
A
B
E 0A
CF
1B
可见,在有向图的 2 C 邻接表中不易找到 3 D 指向该顶点的弧 4 E
精选ppt
精选ppt
9
7.2.2邻接表表示法(Adjacency List)

数据结构(C语言版CHAP7(1)

数据结构(C语言版CHAP7(1)
结束
第 1 页
第七 章

第七章
7.1 图的 概念

7.2 图的存储结构
7.3 图的遍历
7.4 遍历的应用 7.5 有向无环图及应用
结束
第 2 页
第七 章

本章介绍另一种非线性数据结构 —— 图 图:是一种多对多的结构关系,每个元素可以有 零个或多个直接前趋;零个或多个直接后继;
结束
第 3 页
第七 章
结束
存储邻接矩阵的 二维数组 m-1
第 21 页
7.2
图的存储结构
数组表示法类型定义 #define MAX_VERTEX_NUM m //最大顶点个数 typedef enum {DG,DN,AG,AN}GraphKind; //{有向图,有向网,无向图 ,无向网} 此处省略了*info域 typedef struct ArcCell { VRType adj; //VRType 是顶点关系类型。对无权图,用1或0 //表示相邻否;对带权图,则为权值类型。 }ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { VertexType vexs[MAX_VERTEX_NUM]; //存储顶点的一维数组 AdjMatrix arcs; //存储邻接矩阵的二维数组 int vexnum, arcnum; //图的当前顶点数和弧数 GraphKind kind; //图的种类标志 }Mgraph;
结束
第 22 页
7.2
图的存储结构
设G是Mgraph 类型的变量,用于存储无向图,该图有n个顶点,e条边 G的图示如下:
G.vexs
G.arcs

数据结构图的存储结构及基本操作

数据结构图的存储结构及基本操作

数据结构图的存储结构及基本操作一、数据结构图的存储结构数据结构图是一种表示数据元素之间关系的图形结构,常用于描述实体之间的关系、网络拓扑结构等。

数据结构图的存储结构可以使用邻接矩阵、邻接表等方式进行表示。

1.邻接矩阵存储结构邻接矩阵是使用二维数组表示数据结构图的存储结构。

数组的行和列分别代表数据结构图中的顶点,矩阵中的元素表示对应顶点之间的关系。

例如,如果顶点i和顶点j之间存在边,则邻接矩阵中(i,j)位置的元素为1;否则为0。

邻接矩阵的优点是可以快速判断两个顶点之间是否存在边,但缺点是当图中顶点较多时,矩阵中大部分元素为0,造成空间浪费。

2.邻接表存储结构邻接表是使用链表表示数据结构图的存储结构。

每个顶点对应一个链表,链表中的节点表示与该顶点直接相连的其他顶点。

顶点的链表可以使用数组或链表等数据结构来表示。

邻接表的优点是可以有效地利用存储空间,只存储存在边的关系,不存储无关边的信息。

但缺点是判断两个顶点之间是否存在边需要遍历链表,时间复杂度较高。

二、数据结构图的基本操作1.创建数据结构图创建数据结构图的操作是初始化一个空的图结构,可以选择使用邻接矩阵或邻接表存储结构。

根据实际需求,可以根据顶点和边的信息逐个添加到图结构中。

2.添加顶点添加顶点是向数据结构图中增加一个新的顶点,可以根据实际需求给顶点赋予相应的值或标识。

添加顶点的操作需要更新邻接矩阵或邻接表的相应位置。

3.添加边添加边是在两个已存在的顶点之间建立连接关系。

根据实际需求,可以指定边的权重或其他属性。

添加边的操作需要更新邻接矩阵或邻接表的相应位置。

4.删除顶点删除顶点是将一个存在的顶点从图结构中移除,同时将与该顶点相关的边也一并删除。

删除顶点的操作需要更新邻接矩阵或邻接表的相应位置。

5.删除边删除边是在两个已存在的顶点之间断开连接关系。

删除边的操作需要更新邻接矩阵或邻接表的相应位置。

6.查找顶点查找顶点是根据给定的值或标识在图结构中查找相应的顶点。

7.1 图的存储结构

7.1 图的存储结构
如果在生成树上添加1条边,必定构成一个环。 如果在生成树上添加1条边,必定构成一个环。 若图中有n个顶点, 条边, 若图中有n个顶点,却少于n-1条边,必为非连通 图。
生成森林: 生成森林: 由若干棵生成树组成,含全部顶点, 由若干棵生成树组成,含全部顶点,但构 成这些树的边是最少的。 成这些树的边是最少的。
则称此图是连通图。 则称此图是连通图。 连通图 连通分量。 非连通图的极大连通子图叫做连通分量 非连通图的极大连通子图叫做连通分量。
v1与v2是连通的。如果图中任意一对顶点都是连通的, 连通的 如果图中任意一对顶点都是连通的,
图中, 强连通图: 有向图中 在 强连通图: 有向图中, 若对于每一对顶点vi和vj, 都存在一条 的路径, 则称此图是强连通图 强连通图。 从vi到vj和从vj到vi的路径, 则称此图是强连通图。 强连通分量。 非强连通图的极大强连通子图叫做强连通分量 非强连通图的极大强连通子图叫做强连通分量。
上边的条数; 路径长度:非带权图的路径长度是指此路径上边的条数 路径长度:非带权图的路径长度是指此路径上边的条数; 带权图的路径长度是指路径上各边的权之和 带权图的路径长度是指路径上各边的权之和。 各边的权之和。
均不互相重复。 简单路径: 简单路径: 路径上各顶点 v1,v2,...,vm 均不互相重复。
数据结构(C语言) 数据结构(C语言) (C语言
出发, 路径: 路径:在图 G=(V, E) 中, 若从顶点vi 出发, 沿一些边经过一 些顶点vp1,vp2, …,vpm,到达顶点vj。则称顶点序列(vi 则称顶点序列( vp1 vp2 ... vpm vj ) 为从顶点vi 到顶点 vj 的路径。它 路径。 经过的边( ...、 经过的边(vi, vp1)、(vp1, vp2)、...、(vpm, vj)应当是 的边。 属于E的边。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有序对<vi,vj> : 用以vi为起点、以vj为终点 的有向线段表示, 称为有向边或弧。
V2
V4 G2图示
无向图:在图G中,若所有边是无向边,则称G为无向图。
有向图:在图G中,若所有边是有向边,则称G为有向图。
二、图的基本术语
有向完全图: n个顶点的有向图最大边数是n(n-1) 无向完全图: n个顶点的无向图最大边数是n(n-1)/2 1、邻接点及关联边
主要内容

知识点
– – – – 1.图的定义,概念、术语及基本操作。 2.图的存储结构,特别是邻接矩阵和邻接表。 3.图的深度优先遍历和宽度优先遍历。 4.图的应用(连通分量,最小生成树,拓扑排序,关键路经,最短 路经)。 1.基本概念中,完全图、连通分量、生成树和邻接点是重点。 2.建立图的各种存储结构的算法。 3.图的遍历算法及其应用。 4.通过遍历求出连通分量的个数,深(宽)度优先生成树。 5.最小生成树的生成过程。 6.拓扑排序的求法。关键路经的求法。 7.最短路径的手工模拟。
自测题 2
设无向图的顶点个数为n,则该图最多有( )条边。 A.n-1
B.n(n-1)/2
C.n(n+1)/2 D.0 E.N2 【清华大学1998一.5(分)】
自测题 3
一个有n个结点的图,最少有( )个连通分量,最多有( )个 连通分量。
A. 0
B.1 C.n-1 D.n 【北京邮电大学 2000 二.5 (20/8分)】
0
V1 e1 V3 V4 V5 V2 1 0 1 0 1
否则
0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 V1 V2 0 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0
V3 图2
V4
图1
顶点的存储:用一维数组存储(按编号顺序). 顶点间关系:用二维数组存储图的邻接矩阵. 0 1 0 1 0
v1 5 v3
3 2 7
v2 4 v4
3 2 4 5 7
数组表示法类型定义
#define MAX_VERTEX_NUM m //最大顶点个数 typedef enum{DG,DN,UDG,UDN}GraphKind; //{有向图,有向网,无向图,无向网} typedef struct ArcCell{ VRType adj; //VRType是顶点关系类型。对无权图,用1或0 //表示相邻否;对带权图,则为权值类型 InfoType *info;//该弧相关信息的指针,对于不带权图,此域不存在 }ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM] ; typedef struct{ VertexType vexs[MAX_VERTEX_NUM]; //存储顶点的一维数组 AdjMatrix arcs; //存储邻接矩阵的二维数组 int vexnum, arcnum ; //图的当前顶点数和弧数 GraphKind kind; //图的种类标志 }MGraph;
七桥问题的数学模型
1736 年,欧拉证明了自己的猜想,一次不重复走完七座桥是根本不 可能的。随即,他发表了“一笔画定理”:一个图形要能一笔画完, 必须符合两个条件:(1)图形是封闭连通的;(2)图形中的奇点个 数为0 或2。
欧拉的这个研究成果, 开创了图论和拓扑学这两门新的学科 。这两门学科在计算机科学中有着广泛的应用。由此可见,只 要善于用数学的眼光、数学的方法去观察事物,分析问题,就 能把生活中的一些实际问题转化为数学问题, 并用数学的方法 来处理和解决。
0 1 2 3 4
V1 V2 V3 V4 V5
存储顶点的 一维数组
0 1 2 3 4 m m+1 m+2
m-1
存储邻接矩阵 的二维数组

对于网,可以用aij表示权。若vi和vj不邻接(或没有vi邻接到vj ),
则可以用无限大∞表示权。
v1 v2 v3
0 1 0
1 0
0 1 0

重点难点
– – – – – – –
图的示例(有向图与无向图)
V1 V3 V4 G1图示 V5 V3 G2图示 V4 V2 V1 V2
结点之间的关系:多对多,任两个结点之间 都可能有关系存在
7.1 图的概念与基本术语
一、图的概念
V1 V3
V2
图G由两个集合构成,记作G=<V,E> 其中,V是顶点的非空有限集合, E是边的有限集合,边是顶点的无序对或有序对集合。 V4
图的存储结构至少要保存两类信息: 1)顶点的数据 2)顶点间的关系
顶点的编号
设 G=<V, E>是图, V={v1,v2,v3, …,vn }, 设顶点的角标为它的编号.
如何表示顶点间的关系?
一、数组表示法
图的任意两个结点(顶点)之间都可能有关系,故用二维数组来表示。 在数组表示法中,用邻接矩阵表示顶点间的关系。 邻接矩阵:G的邻接矩阵是满足如下条件的n阶矩阵: A[i][j]= 0 1 0 1 0 1 若(vi,vj)E 或 <vi,vj>E
V1 e1 V3 V4
V2
V1
V2
V5
V3
V4
5、连通分量与强连通分量
连通——从顶点Vi到顶点Vj有一条路径,则说Vi和Vj是连通的。 连通图——图中任意两个顶点都是连通的图叫连通图。
连通分量——无向图中的最大(含的边和顶点最多)连通子图。
强连通图——有向图中,如果对每一对Vi,VjV,
存在路径,则称G是强连通图。 2 1 4 3 5
ViVj,从Vi到Vj 和从Vj到 Vi都
5 6 3 强连通图 6
连通图 2 1 4 3
非强连通图
5 6
1
2 3
5 6
强连通分量
6、生成树

一个连通图的生成树是一个极小连通子图,它含有图中全部
顶点,但只有足以构成一棵树的n-1条边。 一棵有n个顶点的生成树有且仅有n-1条边。
七桥问题的数学模型

通过数学建模, 已经把实际问题转化成了数学问题。这时欧拉注意到,如果一个图形 能一笔画成那么除去起点和终点外,其他的点都是经过点。而经过点是有进有出的点 ,即有一条线进这个点,就一定有一条线出这个点。不可能有进无出, 如果有进无出 ,它就是终点;也不可能有出无进,如果有出无进,它就是起点。因此,在经过点进 出的线总数应该是偶数。我们称在一个点进出线的总数是偶数的点为偶点;总数为奇 数的点称为奇点。如果起点和终点是同一个点,那么它也属于有进有出的点,它也是 偶点,这样图上的点全是偶点。如果起点和终点不是同一个点,那么它们必定是奇点 。因此,能够一笔画的图形最多只有两个奇点。
图的主要操作
GraphLocateVertex(G,v); GraphGetVertex(G,v); GraphFirstAdj(G,v); GraphNextAdj(G,v,w);
自测题 1
图中有关路径的定义是( )。 A.由顶点和相邻顶点序偶构成的边所形成的序列
B.由不同顶点所形成的序列
C.由不同边所形成的序列 D.上述定义都不是 【北方交通大学 2001 一.24 (2分)】
自测题 4
要连通具有n个顶点的有向图,至少需要()条边。 A.n-l B.n
C.n+l
D.2n 【北京航空航天大学2000一.6(2分)】
自测题 5
G是一个非连通无向图,共有28条边,则该图至少有______个顶点。
【西安电子科技大学2001软件 一.8 (2分)】
7.2
图的存储结构
一 数组表示法 二 邻接表
V1 e1
V3
V2
V4
V5
邻接点:边的两个顶点 关联边:若边e=(v, u), 则称顶点v、u 关联边e 2、顶点的度、入度、出度
顶点V的度 = 与V相关联的边的数目 在有向图中:
V1
V2
顶点V的入度 = 以V为终点有向边数 顶点V的出度 = 以V为起点有向边数 顶点V的度 = V的出度 + V的入度
设在4地(A,B,C,D)之间架设有6座桥,如图所示: 要求从某一地出发,经过每座桥恰巧一次,最后仍回到原地。 (1)试就以上图形说明:此问题有解的条件是什么? (5分) (2)设图中的顶点数为n,试用C或PASCAL描述与求解此问题有关的 数据结构并编写一个算法,找出满足要求的一条回路。(10分) 清华大学2001
1 5 7 1 5 7

3
2
4
6
3
2
4
6
连通图
生成树
7、网
权——与图的边或弧相关的数叫权(值)。
网(络)——带权的图叫网
V1
1 2
V6
V2
1
V5
1
1
5
6
V4
V3
3 1
6
抽象数据类型图的定义
ADT Graph{ 数据对象 V:V是具有相同特性的数据元素的集合,称为顶点集。 数据关系 R:R={VR} VR={<v,w>|v,w V且P(v,w), <v,w>表示从v到w的弧, 谓词P(v,w)定义了弧<v,w>的意义或信息} 基本操作P: GraphCreat(G,,V,VR); GraphDestory(G); GraphLocateVertex(G,v); GraphGetVertex(G,v); GraphFirstAdj(G,v); GraphNextAdj(G,v,w); GraphInsertVertex(G,v); GraphDeleteVertex(G,v); GraphInsertArc(G,v,w); GraphDeleteArc(G,v,w); DFSTtraverse(G,v,Visit()); BFSTtraverse(G,v,Visit()); }ADT Graph
相关文档
最新文档