数据结构课件第七章图

合集下载

《数据结构》大本课件-7

《数据结构》大本课件-7

是一条简单回路;“v2→v1→v2→v4→v5→v3→v1→v2”是一条回路。
V1
4. 无向完全图、有向完全图
V1
V2
. 有n个顶点的无向图,最多可有n(n−1)/2
V2
V3
条边。如果一个有n个顶点的无向图,拥有
n(n−1)/2条边,那么就称该图为“无向完全图”。
可见,一个无向完全图的每个不同顶点对之 V3
度与出度之和,即:D(vi)=ID(vi)+OD(vi)。
V2
V3
. 比如在有向图里,由于弧< v2, v1>和< v3, v1>都以顶点v1为
弧头,所以顶点v1的入度ID(v1)=2;由于弧< v1, v2>以顶点v1为弧尾, 所以顶点v1的出度OD(v1)=1;于是,顶点v1的度为:
V4
V5
D(v1)=ID(v1)+OD(v1)=2+1=3
其他顶点 。
V6
. 比如,如图所示为一个非连通图,因为从顶点
v1没有路径可以到达顶点v7。
. 比如,该图的两个连通分量如图(a)和(b)所示。 V3
V1 V3
V6
V2
V7
V8
V4
V5
V9
(a)
(b)
7. 边的权、网络
. 可给图的边或弧依附上某种数值,这种
38 V1
与图的边或弧相关的数值被称为“权”。 44
V4
V4
V5
间,都存在有一条边。
. 如图所示是一个无向完全图,因为它有4个顶点,且它有4(4−1)/2=6条边,符合无
向完全图的定义。
. 对于有n个顶点的有向图,最多可以有n(n−1)条弧。如果一个有n个顶点的有向图,

数据结构第七章图PPT课件

数据结构第七章图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)弧头和弧尾:有序偶对的第一个结点称为始点(或弧尾,即不带箭 头的一端),有序偶对的第二个结点称为终点(或弧头,即带箭头的一 端)。

数据结构严蔚敏7章图ppt课件

数据结构严蔚敏7章图ppt课件

InfoType *info;
}VNode,AdjList[MAX_V];
}ArcNode;
typedef struct //图的邻接表类型
{ AdjList vertices; //存储图中所有顶点的数组
int vexnum,arcnum; //存储图的顶点数目和边(弧)的数目
int kind; //图的种类标志
返回
表结点
adjvex nextarc info
表头结点
data firstarc
typedef struct ArcNode typedef struct
{ int adjvex;
{ VertexType data;
struct ArcNode *nextarc; ArcNode *firstarc;
}ArcCell,AdjMatrix[MAX_V][MAX_V];
typedef struct
{ VertexType vex[MAX_V]; //顶点信息数组(如顶点编号等)
AdjMatrix arcs;
//图的邻接矩阵
int vexnum,arcnum; //图的顶点数和边(弧)的数目
GraphKind kind;//图的种类标志
A CB F DE G (a) 有向图G1
A BC D EF (b) 无向图G2
返回
2 几个常用术语 可以证明,对于具有n个顶点的无向图的边和具有n个
顶点的有向图的弧的最大数目分别为n(n-1)/2和n(n-1)。 称具有n(n-1)/2条边的无向图为完全图(completed
grahp)。 称具有n(n-1)条弧的有向图为完全有向图 称边或弧的数目e<nlogn的图为稀疏图(sparse

数据结构《第七章、图》PPT课件

数据结构《第七章、图》PPT课件
由于“弧”是有方向的,因此称由顶点集 和弧集构成的图为有向图。
例如: 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> }
若<v, w>VR 必有<w, v>VR, 则称 (v,w) 为顶点 v 和顶点 w 之间存在一条边。
A
B
EB
E
CF
CF
假设一个连通图有 n 个顶点和 e 条边, 其中 n-1 条边和 n 个顶点构成一个极小连 通子图,称该极小连通子图为此连通图的 生成树。
B A
F
C D
E
对非连通图,则 称由各个连通分 量的生成树的集 合为此非连通图 的生成森林。
基本操作
结构的建立和销毁 对顶点的访问操作
插入或删除顶点 插入和删除弧
7.2 图的存储表示
一、图的数组(邻接矩阵)存储表示 二、图的邻接表存储表示 三、有向图的十字链表存储表示 四、无向图的邻接多重表存储表示
一、图的数组(邻接矩阵)存储表示
定义:矩阵的元素为
{ 0 (i,j)VR
Aij= 1 (i,j)VR
B A
F
C D
E
010010 100010 000101 001001 110000 011100
含有 e=n(n-1) 条弧的有向图称作 有 向完全图;
若边或弧的个数 e<nlogn,则称作 稀疏图,否则称作稠密图。
假若顶点v 和顶点w 之间存在一条边, 则称顶点v 和w 互为邻接点, 边(v,w) 和顶点v 和w 相关联。

数据结构第7章 图

数据结构第7章 图
typedef enum{DG,DN,UDG,UDN}GraphKind; /*定义顶点数据类型*/
typedef char VertexData; /*定义邻接矩阵中元素值(即边信息)的数据类型*/
typedef int ArcNode; /*定义图的邻接矩阵类型:一个顶点信息的一维数组,一个邻
接矩阵、当前图中包含的顶点数、边数以及图类型(有向图、 有向网、无向图、无向网)*/
输入<A,B>15,<A,C>6,<C,D>8,<D,A>10后,分别建立4 个边结点结点,存储这些边结点信息,然后将这些边结 点插入到相应的表结点链表中。可是关键的问题是如何 根据输入的边结点信息找到正确的链接位置?
利用一个定位函数(类似邻接数组的方法), LocateVertex(G,v)得到顶点v在表头结点数组中的 位置即可。
让我们来分析一下如何正确的使用邻接表存 第储一步一:个初图始。化。在该步骤中给出图的顶点数、边
(弧)数以及表头结点组。 例如对于下图,其初始的状态为:
G.vexnum=4;
G.arcnum=4; 0 A ^
1B ^
2C ^
3D ^
A 15 B
6
10
8
C
D
第二步:输入边结点信息,建立与各个表头结点邻接 的边结点链表。
typedef struct { VertexData vertex[MAX_VERTEX_NUM];
ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int vertexnum,arcnum; GraphKind kind; } AdjMatrix;//图的邻接矩阵表示类型

数据结构精品PPT课件第七章 图(ppt文档)

数据结构精品PPT课件第七章 图(ppt文档)

V0
V1
V2
V3
V4
V0
V1
V2
V3
练例习
245
1
3
6
G1
图G1中:V(G1)={1,2,3,4,5,6} E(G1)={<1,2>, <2,1>, <2,3>, <2,4>, <3,5>, <5,6>, <6,3>}
例 1
57
32
46
G2
图G2中:V(G2)={1,2,3,4,5,6,7} E(G1)={(1,2), (1,3), (2,3), (2,4),(2,5), (5,6), (5,7)}
1
V1 0 0 1 0
1
V2 0 0 1 1
2
V3 0 0 0 1
V4 1 1 0 0 2
出度
1 2 1 2
0
0 1 01 1
1
2
G1.arcs
1
10
0 1
1 0
0 1
3
1010
0
0 1 01
1
G2.arcs 1 0 1
2
000
无向图的邻接矩阵是对称的; 有向图的邻接矩阵可能是不对称的。
V1={v0 ,v1,v2,v3,v4 } E1={(v0,v1),(v0,v3),(v1,v2),(v1,v4),(v2,v3)(v2,v4)}
7.1图的定义和术语

V0
V1
V2
V3
有序对<vi,vj> : 用以为vi起点、以vj 为终点的有向线段表 示,称为有向边或弧 ;
G2=<V2,E2>

《数据结构》课件——第7章 图


邻接矩阵
arc=
V1
1
0
1
1
V1
V2
V2 0 1 0 0
V3 1 1 0 0
无向图的邻接矩阵的特点?
主对角线为 0 且一定是对称矩阵。
无向图的邻接矩阵
V0
V3
V1
V2
如何求顶点 Vi 的度?
012 3
vertex= V0 V1 V2 V3
V0 V1 V2 V3
V0 0 1 0 1 arc= V1 1 0 1 1
V0
V1
V2
V3
V4
生成树
V0 V3
V1
V6
生成森林
V5
V4
V2
V0
V3 V0 V4
V1 V2
V4
V1 V3 V6 V5
V2
案例:六度空间理论
➢ 你和任何一个陌生人之间所间隔的 人不会超过6个,也就是说,最多通 过6个中间人你就能够认识任何一个 陌生人。
图的抽象数据类型定义
图是一种与具体应用密切相关的数据结构,它的基本操作往往随 应用不同而有很大差别。下面给出一个图的抽象数据类型定义的例子 ,简单起见,基本操作仅包含图的遍历,针对具体应用,需要重新定 义其基本操作。
V0 V3
V1 V6
V5
V4
V2
V0
V1
V4 V3
V2 V6
连通分量是对无向图的一种划分
V5
图的基本术语
➢ 强连通图:在有向图中,对图中任意一对顶点vi和vj (i≠j),若 从顶点vi到顶点vj和从顶点vj到顶点vi均有路径,则称该有向图是
强连通图。 ➢ 强连通分量:非强连通图的极大强连通子图。

数据结构 (C语言版)课件:第7章_图

非简单图
2020/9/30
3
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 无向图和有向图
● 无向图:如果图中顶点 vi 和 vj 之间的边无方向,则称这条边为无向边, 用无序偶对 (vi, vj) 表示,称该图为无向图。
● 有向图:如果图中顶点 vi 和 vj 之间的边有方向,则称这条边为有向边, 用有序偶对 <vi, vj> 表示,称该图为有向图。
无论有向图还是无向图,顶点数 n、边 数 e 和度数之间满足:
2020/9/30
8
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 权和网
● 权:权通常是指对图中边赋予的有意义的数值量。在实际应用中,权 可以有具体的含义。
● 网:如果将图中的每条边上都赋上一个权值,则称这种图为网,或称 为有权图 。
2020/9/30
6
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 稀疏图和稠密图
● 稀疏图:边数很少的图称为稀疏图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e<nlogn。
● 稠密图:边数很多的图称为稠密图,如果 e 表示图中的边数,n 表示 图中的顶点数,则 e≥nlogn。
2020/9/30
无向完全图
有向完全图
5
7.1 图的逻辑结构
7.1.1 图的定义
● 相关概念 邻接和依附
● 邻接:对图 G=(V, VR),如果边 (vi, vj)∈VR,则称顶点 vi 和 vj 互为邻 接点;如果弧<vi, vj>∈VR,则称顶点 vi 邻接到 vj,vj 邻接自 vi。
● 依附:对图 G=(V, VR),如果边 (vi, vj)∈VR 或弧 <vi, vj>∈VR,则称 边 (vi, vj) 或弧 <vi, vj> 依附于顶点 vi 和 vj。

数据结构课件 第7章 图


例如下列定义的有向图如右图所示。 G1=(V1, VR1) 其中:V1 = {A, B, C, D, E} VR1={<A,B>,<A,E>,<B,C>,<C,D>, <D,B>,<D,A>,<E,C>}
例如下列定义的无向图如右所示。 G2=(V2, VR2) 其中:V2={A, B, C, D, E, F} VR2={(A,B),(A,E),(B,E),(C,D) ,(D,F),(B,F),(C,F) }
图的构造 操作的实现框架
Status CreateGraph (MGraph &G) { //采用数组(邻接矩阵)表示法,构造图G Scanf(&G.kind); Switch(G.kind) case DG:return CreatDG; //构造有向图G case DN:return CreatDN; //构造有向网G case UDG:return CreatUDG; //构造有向图G case UDN:return CreatUDN; //构造有向网G default:return ERROR; }
7.2 图的存储表示 7.2.1 图的数组(邻接矩阵)存储表示 假设图中顶点数为n,则邻接矩阵 定义为
网的邻接矩阵的定义为,当vi到vj有弧相邻接时, aij 的值应为该弧上的权值,否则为∞。 将图的顶点信息存储在一个一维数组中,并将它的邻 接矩阵存储在一个二维数组中即构成图的数组(邻接矩阵) 表示。
FirstAdjVex(G, v); 初始条件:图 G 存在,v 是 G 中某个顶点。 操作结果:返回 v 的第一个邻接点。 若该顶点在 G 中没有邻接点,则返回“空”。 NextAdjVex(G, v, w); 初始条件:图 G 存在,v 是 G 中某个顶点, w 是 v 的邻接顶点。 操作结果:返回 v 的(相对于 w 的)下一个邻接 点。若 w 是 v 的最后一个邻接点,则返回"空"。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

且仅包含G的n-1条边。
极小连通子图意思是:该子图是G 的连通子图,在该 子图中删除任何一条边,子图不再连通。
非连通图的生成树则组成一个生成森林。若图中有n个 顶点,m个连通分量,则生成森林中有n-m条边。
V0
V1
V0
V1
V0
V2
V3
V4
V2
V3
V4
V3
V1
V2
V4
连通图 G1
G1的生成树
2 1
45
ch7
第七章 图
学习要点 理解图的基本概念及有关术语;熟悉图的各种存储结 构及其构造方法; 熟练掌握图的两种遍历(深度优先搜索和广度优先 搜索)的算法思想、步骤; 掌握构造最小生成树的方法,并理解算法; 理解用Dijkstra方法求解单源最短路径问题; 掌握求活动网络的拓扑排序的方法,并理解算法; 掌握求解关键路径的方法。
有向图 A=
0000 0001
V2
V3
1000
V0
V1
V2
B= 无向图
V3
V4
01010 10101 01011 10100 01100
V0 5 V3 7
3 6 8 V4
C=
V1 4 V2 9 无向网
0 3 6 5∞ 3 0 通分量。显然,任何强连通图的强连通分量只有一个,
即它本身,而非强连通图有多个强连通分量。
V1
V0
V1
V0
V1
V0
V2
V3
强连通图G1
V2
V3
非强连通图G2
V2
V3
G2的两个强连 通分量
生成树、生成森林
ch7
所谓连通图G的生成树,是G的包含其全部n 个顶点, 且以最少的边数使其连通的一个极小连通子图。它必定包含
在图G中增添一条从顶点v到顶点w的边或弧。 10、DelArc(&G, v, w)
在图中删除一条从顶点v到顶点w的边或弧。 11、DFS (G, v)
在图G中,从顶点v出发深度优先遍历图。 12、BFS (G,v)
在图G中,从顶点v出发广度优先遍历图。
ch7
7.2 图的存储结构
图是一种结构复杂的数据结构,表现在不仅各 个顶点的度可以千差万别,而且顶点之间的逻辑关 系也错综复杂。从图的定义可知,一个图的信息包 括两部分,即图中顶点的信息以及描述顶点之间的 关系(边或者弧)的信息。因此无论采用什么方法 建立图的存储结构,都要完整、准确地反映这两方 面的信息。
1
57
245
32
46
1
G1
3
6
G2
ch7
完全图、稠密图、稀疏图
无向完全图:在一个无向图中,如果任意两顶点都有一条直 接边相连接,则称该图为无向完全图。在一个含有n个顶点 的无向完全图中,有n(n-1)/2条边。
有向完全图:在一个有向图中,如果任意两顶点之间都有方 向互为相反的两条弧相连接,则称该图为有向完全图。在一 个含有n个顶点的有向完全图中,有n(n-1)条弧。
图通常有邻接矩阵、邻接表、邻接多重表和十 字链表等表示方法。
7.2.1 邻接矩阵
ch7
定义:在邻接矩阵表示中,除了用一维数组存放顶点本 身信息外,还用一个矩阵表示各个顶点之间的邻接关系。这 个矩阵称为邻接矩阵。
假设图G=(V, E)有n个确定的顶点,即V={v0,v1,…, vn-1} ,则表示G中各顶点相邻关系为一个n×n的矩阵,矩阵 的元素为 :
在无向图中,一条边(x,y)与(y,x)表示的结果相同, 用圆括号表示。例如:
G1=(V1, E1) 其中:V1={v0, v1, v2, v3, v4 } E1={(v0, v1), (v0, v3), (v1, v2), (v1, v4), (v2, v3), (v2, v4)}
V0
V1
V2
V3
图的应用举例
例1 交通图(公路、铁路) 顶点:地点 边:连接地点的公路
例2 电路图 顶点:元件 边:连接元件之间的线路
例3 各种流程图 如产品的生产流程图 顶点:工序 边:各道工序之间的顺序 关系
ch7
V0
V1
V2
V3
V4
V0
V1
V2
V3
ch7
2.图的相关术语 有向图和无向图
在图中,若用箭头标明了边是有方向性的,则称这样的 图为有向图,否则称为无向图。
也是有向的,它是由若干条弧组成。
如图所示的无向图G1中,v0→v3→v2→v4与
v0→v1→v4是从顶点v0 到顶点v4 的两条路径,路径长
度分别为3和2。
V0
V1
V2
V3
V4
G1
V1 V0
ch7
回路、简单路径、简单回路 起点和终点相同的路径称为回路或者环(Cycle
)。序列中顶点不重复出现的路径称为简单路径。除 第一个顶点与最后一个顶点之外,其他顶点不重复出 现的回路称为简单回路。
(Connected Graph),否则称为非连通图。
无向图中,极大的连通子图为该图的连通分量。显
然,任何连通图的连通分量只有一个,即它本身,而非
连通图有多个连通分量。
G2的两个
V0
V1
连通分量
V0
V1 V4
V2
V3
V4
V3
V2 V5
连通图G1
非连通图G2
强连通图、强连通分量
ch7
对于有向图来说,若图中任意一对顶点vi 和vj(i≠j) 均有从一个顶点vi到另一个顶点vj的路径,也有从vj到vi的路 径,则称该有向图是强连通图。有向图的极大强连通子图称
E'为E的子集,称图G'为图G的子图(Subgraph) 。
例: (b) 是 (a) 的子图,(c) 图不是(a)的子图。
V0
V1
V2
V3
V4
V0
V1
V2
V3
V4
V0
V1
V3
(a)
(b)
(c)
ch7
连通图、连通分量
在无向图中,如果从一个顶点vi到另一个顶点vj (i≠j)有路径,则称顶点vi和vj是连通的。若图中任意 两个顶点都是连通的,则称此无向图为连通图
1 若(i,j)∈E(G)或〈i,j〉∈E(G) A[i][j]= 0 其它情形
若G是带权图,则邻接矩阵定义为: wij 若(i,j)∈E(G)或〈i,j〉∈E(G)
A[i][j]= 0 所在对角线上元素
∞ 其它情形 其中,wij表示边上的权值;∞表示大于所有边上权值的数。

V0
V1
ch7
0110
边(vi, vj)依附于顶点vi与顶点vj。
在有向图中,用有序偶对<vi, vj>表示从顶点vi出发向顶
点vj的边,vi为始点,vj为终点。有向边也称为弧(arc),vi
为弧尾(tail)或初始点, vj为弧头(head)或终端点,则<vi, vj>
表示为一条弧,而<vj, vi>表示vj为弧尾、 vi为弧头的另一条
由此,所谓顶点在图中的位置指的是该顶点在这个人为
的随意排列中的位置(或序号)。同理可对某个顶点的所有
邻接点进行排队,在这个排队中自然形成了第1个或第k个邻 接点。若某个顶点的邻接点的个数大于k则称第k+1个邻接 点为第k个邻接点的下一个邻接点,而最后一个邻接点的下一 个邻接点为“空”。
图的基本操作
V4
无向图G1
无序对(vi,vj): 用连接顶点vi、vj的 线段表示,称为无向
边;
ch7
在有向图中,一条边<x,y>与<y,x>表示的结果不相同,
用尖括号表示。<x,y>表示从顶点x出发向顶点y的边,x为始
点,y为终点,有向边也称为弧,x为弧尾,y为弧头,则
<x,y>表示为一条弧,而<y,x>表示y为弧尾,x为弧头的另一条
路径、路径长度
ch7
在无向图中,若存在一个顶点序列vp,vi1,vi2,…,vim,vq 使得(vp,vi1),(vi1,vi2),…, (vim,vq)都属于E(G),则称其 为顶点vp到顶点vq之间的一条路径(Path)。路径上边的 数目称为路径长度(Path length)。在有向图中,路径
之和:
n
n
ri ci
i 1
i 1
ri 为入度, ci为出度
ch7
边的权、网
与边有关的数据信息称为权(weight),权可 以代表一个顶点到另一个顶点的距离,耗费等。边
上带权的图称为网(network)。
1
1
3
45
6 2 58 3
2
4
7
(a) 无向网
2
A
B
4
1 35
C
(b)有向网
无向带权图和有向带权图
V0
V1
有序对<vi,vj> :
V2
V3
有向图G2
用以vi为起点、以vj为 终点的有向线段表示, 称为有向边或弧;
ch7
顶点、边、弧、弧头、弧尾
图中的数据元素vi称为顶点(Vertex );P(vi, vj)表示在顶
点vi和顶点vj之间有一条直接连线。
如果是在无向图中,则称这条连线为边(edge);边用顶 点的无序偶对(vi, vj)来表示,称顶点vi和顶点vj互为邻接点,
ch7
7.1 图的定义和术语
1.图的定义 定义:图(Graph)是由非空的顶点集合和一个描
述顶点之间关系(边或者弧)的集合组成。
其二元组定义为:
G=(V,E) V={vi| vi∈DataObject} E={(vi,vj)| vi, vj ∈V且P(vi, vj)} 其中,G表示一个图,V是图G中顶点的集合,E是 图G中边的集合。 集合E可以是空集,若E为空,则该图只有顶点而 没有边。
相关文档
最新文档