数据结构10-11-12图

上传人:kms****20 文档编号:56787206 上传时间:2018-10-15 格式:PPT 页数:71 大小:2.12MB
返回 下载 相关 举报
数据结构10-11-12图_第1页
第1页 / 共71页
数据结构10-11-12图_第2页
第2页 / 共71页
数据结构10-11-12图_第3页
第3页 / 共71页
数据结构10-11-12图_第4页
第4页 / 共71页
数据结构10-11-12图_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《数据结构10-11-12图》由会员分享,可在线阅读,更多相关《数据结构10-11-12图(71页珍藏版)》请在金锄头文库上搜索。

1、数据结构 Data Structure彭宏京南京工业大学计算机科学系 2008年9月,数据结构课程的内容,多对多 (m:n),7.1 基本术语 7.2 存储结构 7.3 图的遍历 7.4 图的连通性 7.5 图的应用,第7章 图,7.1 图的基本术语,其中:V 是G 的顶点集合,是有穷非空集;E 是G 的边集合,是有穷集。,问:当E(G)为空时,图G存在否? 答:还存在!但此时图G只有顶点而没有边。,有向图: 无向图: 完全图:,图G中的每条边都是有方向的; 图G中的每条边都是无方向的; 图G任意两个顶点都有一条边相连接;,若 n 个顶点的无向图有 n(n-1)/2 条边, 称为无向完全图 若

2、 n 个顶点的有向图有n(n-1) 条边, 称为有向完全图,V=vertex E=edge,图:记为 G( V, E ),例:判断下列4种图形各属什么类型?,无向,无向图(树),有向图,有向,n(n-1)/2 条边,n(n-1) 条边,G1的顶点集合为V(G1)=0,1,2,3 边集合为E(G1)=(0,1),(0,2),(0,3),(1,2),(1,3),(2,3),完全图,完全图,证明:,证明:若是完全有向图,则n个顶点中的每个顶点都有一条弧指向其它n-1个顶点, 因此总边数=n(n-1),证明:从可以直接推论出无向完全图的边数因为无方向,两弧合并为一边,所以边数减半,总边数为n(n-1)

3、/2。, 完全无向图有n(n-1)/2 条边。, 完全有向图有n(n-1)条边。,稀疏图: 稠密图:,设有两个图 G(V, E) 和 G(V, E)。若 V V 且 E E, 则称 图G 是 图G 的子图。,子 图:,边较少的图。通常边数远少于nlogn 边很多的图。,无向图中,边数接近n(n-1)/2 有向图中,边数接近n(n-1),带权图:,即边上带权的图。其中权是指每条边可以标上具有某种含义的数值(即与边相关的数)。,连通图:,在无向图中, 若从顶点v1到顶点v2有路径, 则称顶点v1与v2是连通的。如果图中任意一对顶点都是连通的, 则称此图是连通图。 非连通图的极大连通子图叫做连通分量

4、。,带权图,在有向图中, 若对于每一对顶点vi和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称此图是强连通图。,强连通图:,网 络:,非强连通图的极大强连通子图叫做强连通分量。,生成树:,是一个极小连通子图,它含有图中全部n个顶点,但只有n-1条边。,若干棵生成树的集合,含全部顶点,但构成这些树的边或弧是最少的。,有两类图形不在本章讨论之列:,图的基本术语(续),如果在生成树上添加1条边,必定构成一个环。 若图中有n个顶点,却少于n-1条边,必为非连通图。,生成森林:,邻接点:,有向边(u, v)称为弧,边的始点u 叫弧尾,终点v 叫弧头。,顶点 v 的入度是以 v 为终点的有向边

5、的条数, 记作 ID(v); 顶点 v 的出度是以 v 为始点的有向边的条数, 记作 OD(v)。,若 (u, v) 是 E(G) 中的一条边,则称 u 与 v 互为邻接顶点。,弧头和弧尾:,入度和出度:,问:当有向图中仅1个顶点的入度为0,其余顶点的入度均为1,此时是何形状?,度:,顶点v 的度是与它相关联的边的条数。记作TD(v)。 在有向图中, 顶点的度等于该顶点的入度与出度之和。,U 的入度=? U 的出度=?,答:是树!而且是一棵有向树!,简单路径:,路径上各顶点 v1,v2,.,vm 均不互相重复。,回路:,若路径上第一个顶点 v1 与最后一个顶点vm 重合,则称这样的路径为回路或

6、环。,路径:,在图 G(V, E) 中, 若从顶点 vi 出发, 沿一些边经过一些顶点 vp1, vp2, , vpm,到达顶点vj。则称顶点序列 ( vi vp1 vp2 . vpm vj ) 为从顶点vi 到顶点 vj 的路径。它经过的边(vi, vp1)、(vp1, vp2)、.、(vpm, vj)应当是属于E的边。,路径长度:,非带权图的路径长度是指此路径上边的条数; 带权图的路径长度是指路径上各边的权之和。,图的术语(续),ADT Graph 数据对象V: 数据关系 R:基本操作P:ADT Graph,图的抽象数据类型,V是具有相同特性的数据元素的集合,称为顶点集。,R=VR;VR=

7、|v,wV 且 P(v,w), 表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息,CreatGraph ( 初始条件:V是图的顶点集,VR是图中弧的集合。操作结果:按V和VR的定义构造图G。,注意:V 的大小写含义不同!,InsertVex ( 初始条件:图G存在,v 和图中顶点有相同特征。操作结果:在图G中添加新顶点。,(参见教材P156-257),7.2 图的存储结构,图的特点:,链式存储结构:,顺序存储结构:,难!,(多个顶点,无序可言,无法仅以顶点坐标表达相互关系),可用多重链表,邻接矩阵(数组)表示法 邻接表(链式)表示法 十字链表表示法 邻接多重表表示法,但可用数组描述元素间

8、关系。,非线性结构(m :n),邻接矩阵,邻接表 十字链表 邻接多重表,各种表示法成立的原则:存入电脑后能惟一复原, 建立一个顶点表和一个邻接矩阵。,1. 邻接矩阵(数组)表示法,例1:,邻接矩阵:,A.Edge =,( v1 v2 v3 v4 v5 ),v1 v2 v3 v4 v5,0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0,分析1:无向图的邻接矩阵是对称的; 分析2:顶点i 的度第 i 行 (列) 中1 的个数; 特别:完全图的邻接矩阵中,对角元素为0,其余全1。,顶点表:,无向图的邻接矩阵如何表示?,记录各个顶点信息,表示各个顶点之

9、间关系, 设图 A = (V, E) 有 n 个顶点,则图的邻接矩阵是一个二维数组 A.Edgenn,定义为:,0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0,例2 :有向图的邻接矩阵如何表示?,分析1:有向图的邻接矩阵可能是不对称的。 分析2:顶点vi的出度=第i行元素之和,OD(vi )= A.Edge i j 顶点vi的入度=第i列元素之和。ID(vi )= A.Edge j i 顶点的度=第i行元素之和+第i列元素之和,即:TD( vi

10、 ) = OD( vi ) + ID( vi ),邻接矩阵:,A.Edge =,( v1 v2 v3 v4 ),v1 v2 v3 v4,0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,注:在有向图的邻接矩阵中,第i行含义:以结点vi为尾的弧(即出度边);第i列含义:以结点vi为头的弧(即入度边)。,顶点表:,0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0,0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0,容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。n个顶点需要n*n个单元存储边(弧);空间效率为O(n2)。,

11、例3 : 有权图(即网络)的邻接矩阵如何表示?,定义:,以有向网为例:,邻接矩阵:, ,N.Edge =,( v1 v2 v3 v4 v5 v6 ),邻接矩阵法优点:,邻接矩阵法缺点:,顶点表:,5 7 4 8 95 65 3 1, 5 7 4 8 9 5 6 5 3 1 ,v1 v2 v3 v4 v5 v6,对稀疏图而言尤其浪费空间。,注:用两个数组分别存储顶点表和邻接矩阵 #define INFINITY INT_MAX /最大值 #define MAX_VERTEX_NUM 20 /假设的最大顶点数 Typedef enum DG, DN, AG, AN GraphKind; /有向/无

12、向图,有向/无向网,图的邻接矩阵在机内如何表示? (参见教材P161),对于n个顶点的图或网,空间效率=O(n2),Typedef struct ArcCell /弧(边)结点的定义VRType adj; /顶点间关系,无权图取1或0;有权图取权值类型InfoType *info; /该弧相关信息的指针 ArcCell, AdjMatrix MAX_VERTEX_NUM MAX_VERTEX_NUM ;,Typedef struct /图的定义 VertexType vexs MAX_VERTEX_NUM ; /顶点表,用一维向量即可(n) AdjMatrix arcs; /邻接矩阵n*n I

13、nt Vernum, arcnum; /顶点总数n,弧(边)总数e GraphKind kind; /图的种类标志 Mgraph;,Status CreateUDN(Mgraph /输入n个顶点值,存入一维向量,例:用邻接矩阵生成无向网的算法(参见教材P162),对于n个顶点e条弧的网, 建网时间效率 = O(n+n2+e*n),for(i=0; iG.vexnum; +i) /对邻接矩阵n*n个单元初始化,adj=,info=NULL for(j=0;jG.vexnum;+j) G.arcsij=INFINITY, NULL;,for(k=0;kG.arcnum;+k) /给邻接矩阵有关单元

14、赋初值(循环次数弧数escanf( /如果弧有信息则填入G.arcsij = G.arcs j i; /无向网是对称矩阵,return OK; / CreateUDN,2. 邻接表(链式)表示法, 对每个顶点vi 建立一个单链表,把与vi有关联的边的信息(即度或出度边)链接起来,表中每个结点都设为3个域:, 每个单链表还应当附设一个头结点(设为2个域),存vi信息;,表结点,头结点,邻接点域,表示vi 邻接点的位置,链域,指向下一个边或弧的结点,数据域,与边有关信息(如权值),数据域,存储顶点vi 信息,链域,指向单链表的第一个结点, 每个单链表的头结点另外用顺序存储结构存储。,例1:无向图的邻接表如何表示?,邻接表,例2:有向图的邻接表如何表示?,邻接表(出边),逆邻接表(入边),

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号