收藏 分享(赏)

1 图的基本概念和存储结构.ppt

上传人:jinchen 文档编号:6922738 上传时间:2019-04-27 格式:PPT 页数:62 大小:516KB
下载 相关 举报
1 图的基本概念和存储结构.ppt_第1页
第1页 / 共62页
1 图的基本概念和存储结构.ppt_第2页
第2页 / 共62页
1 图的基本概念和存储结构.ppt_第3页
第3页 / 共62页
1 图的基本概念和存储结构.ppt_第4页
第4页 / 共62页
1 图的基本概念和存储结构.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、图和图的存储结构,图的定义和术语,图的存储表示,小结,用java语言描述图的存储结构,课堂练习,1. 图的定义,2. 图的名词和术语,3. 图的基本操作,图和图的存储结构,图的定义,图(graph)是由一个顶点(vertex)集 V 和一个边(edge|弧arc)集 E构成的数据结构。,Graph = (V, E )E(v,w| v,wV),每条边(edge)是一副点对(v,w),其中v,w V。表示从 v 到 w 的一条边(弧),称 v 为弧尾(tail),w 为弧头(head)。,图的定义有向图,如果“弧”是有方向的,则称由顶点集和弧集构成的图为有向图(digraph)。,例如:,G1 =

2、 (V1, E1),V1=A, B, C, D, E,E1=, , , , , ,图的定义无向图,若E 必有E,则以无序对(v,w) 代替这两个有序对,称 (v,w) 为顶点 v 和顶点 w 之间存在一条边。,上述这种由顶点集和边集构成的图称作无向图。,图的定义无向图,例如: G2=(V2,E2),V2=A, B, C, D, E, F,E2=(A, B), (A, E),(B, E), (B, F), (C, D), (C, F) (D, F,弧除了有向和无向的含义之外,有时候还具有第三种成分,称为权(weight)或值(cost)。,名词和术语,1)子图、网,2)完全图、稀疏图、稠密图,3

3、)邻接点、度、入度、出度,4)路径、路径长度、简单路径、简单回路,5)连通图、强连通图、弱连通图,1)子图、网,设图G=(V,E) 和图 G=(V,E), 且 VV, EE, 则称 G 为 G 的子图。,B,名词和术语,弧或边带权的图分别称作有向网或无向网。,15,9,7,21,11,3,2,名词和术语,1)子图、网,2)完全图、稀疏图、稠密图,假设图中有 n 个顶点,e 条边,则,含有 e=n(n-1)/2 条边的无向图称作完全图;,含有 e=n(n-1) 条弧的有向图称作有向完全图;,若边或弧的个数 enlogn,则称作稀疏图,否则称作稠密图。,名词和术语,3)邻接点、度、入度、出度,邻接

4、点:假若顶点v和顶点w之间存在一条边,则称顶点v和w互为邻接点,,度:和顶点v关联的边的数目,记为TD(v)。,边(v,w)和顶点v和w相关联。,名词和术语,TD(B) = 3,TD(A) = 2,3)邻接点、度、入度、出度,顶点的出度: 以顶点v 为弧尾的弧的数目;记为OD(v),对于右图所示的有向图来说,由于弧有方向性,则有入度和出度之分。,名词和术语,3)邻接点、度、入度、出度,顶点的入度: 以顶点v为弧头的弧的数目,记为ID(v),顶点的度(TD)= 出度(OD)+入度(ID),ID(B) = 2,OD(B) = 1,TD(B) = 3,名词和术语,ID(A) = 1,OD(A) =

5、2,TD(A) = 3,3)邻接点、度、入度、出度,名词和术语,在一个图中,所有顶点的度数之和等于所有边数的( )倍。A.1/2 B.1 C.2 D.4,思考,4)路径、路径长度、简单路径、简单回路、圈(环),路径:设图G=(V,E)中的一个顶点序列u=v1,v2, , vN=w中,(vi,vi+1)E,0iN,则称从顶点u 到顶点w 之间存在一条路径。,如:从A到D长度为 3 的路径A,B,C,D,名词和术语,路径长度:路径上边的数目。,简单路径:指序列中顶点不重复出现的路径。,简单回路:指序列中第一个顶点和最后一个顶点相同的路径。,名词和术语,圈(cycle):是满足v1=vN且长至少为1

6、的一条路径。如果该路径是简单路径,那么这个圈就是简单圈。一个有向无圈图简称为DAG。,4)路径、路径长度、简单路径、简单回路、圈(环),5)连通图、强连通图、弱连通图,连通图:若无向图G中任意两个顶点之间都有路径相通,则称此图为连通图;,名词和术语,强连通图:若有向图任意两个顶点之间都存在一条有向路径,则称为强连通图。,名词和术语,若有向图去掉弧的方向后是连通的,则称为弱连通图。,5)连通图、强连通图、弱连通图,基本操作,1.结构的建立和销毁,3.插入或删除顶点,5.对邻接点的操作,2.对顶点的访问操作,6.遍历,4.插入和删除弧,CreatGraph(V, E):/ 按定义(V, E) 构造

7、图,DestroyGraph(G):/ 销毁图,1.结构的建立和销毁,基本操作,2.对顶点的访问操作,LocateVex(u); / 若G中存在顶点u,则返回该顶点在/ 图中“位置” ;否则返回其它信息。,GetVex(v); / 返回 v 的值。,PutVex(v, value); / 对 v 赋值value。,基本操作,3.插入或删除顶点,InsertVex(v); /在图G中增添新顶点v。,DeleteVex(v);/ 删除G中顶点v及其相关的弧。,基本操作,4.插入和删除弧,InsertArc(v, w); / 在G中增添弧,若G是无向的,/则还增添对称弧。,DeleteArc(v,

8、w); /在G中删除弧,若G是无向的,/则还删除对称弧。,基本操作,5.对邻接点的操作,FirstAdjVex(v); / 返回 v 的“第一个邻接点” 。若该顶点 /在 G 中没有邻接点,则返回“空”。,NextAdjVex(v, w); / 返回 v 的(相对于 w 的) “下一个邻接 点”。 / 若 w 是 v 的最后一个邻接点,则返回“空”。,基本操作,6.遍历,DFSTraverse(G, v); /从顶点v起深度优先遍历图G。,BFSTraverse(G, v); /从顶点v起广度优先遍历图G。,基本操作,一、图的数组(邻接矩阵)存储表示,二、图的邻接表存储表示,图的存储表示,三、

9、存储结构的比较,图的存储表示-邻接矩阵,邻接矩阵(adjacent matrix)表示法:使用一个二维数组,对于每一条边(u,v),置Auv=true;否则,为false。如果边有一个权,可以置Auv等于该权,而使用一个很大或者很小的权作为标记表示不存在的边。,图的存储表示-邻接矩阵,1 2 3 4 5 6 7,图的存储表示-邻接矩阵,无向图:对称矩阵,对于稠密(dense)图合适。,图的存储表示-邻接表,邻接表(adjacency list)表示法: 对每一个顶点,使用一个表存放所有邻接的顶点。如果边有权,那么这个附加信息也可以存储在邻接表中。,图的存储表示-邻接表,对于稀疏(sparse)

10、图合适。,这种邻接表本身可以被保存在任何种类的List中。ArrayList和LinkedList。,图的存储表示-邻接表,邻接表:图的链式存储结构,对图中每个顶点建立一个单链表,第i个单链表中的节点表示依附顶点Vi的边。,对有向图来说,是指以顶点Vi为弧尾的弧。,图的存储表示-邻接表,1)无向图的邻接表,图的存储表示-邻接表,2)有向图的邻接表-每个顶点链接的是以该顶点为弧尾的弧,但,在有向图的邻接表中不易找到指向该顶点的弧。,图的存储表示-邻接表,3)有向图的逆邻接表-每个顶点链接的是指向该顶点的弧,图的存储表示-邻接表,邻接表:图的链式存储结构,弧节点类 (链表节点类):,顶点节点类:,

11、firstarc,弧节点类都属于链表的Node类。,图的存储表示-邻接表,public class Vertex AnyType data;Arc firstArc;/boolean visited; ,public class Arcint adjVex;Arc nextArc;/int weight; ,图的存储表示-邻接表,图的邻接表: 1、容易找到任意顶点的一个邻接点 2、但是要判定任意两个顶点(vi,vj)之间是否有边或者弧相连,需要搜索第i个或者第j个链表,不如邻接矩阵方便。,存储结构的比较,邻接矩阵可用于DG、UDG、DN、UDN 邻接表可用于DG、UDG、DN、UDN,一、应用

12、范围,存储结构的比较,邻接矩阵: n + n2 邻接表用于DG和DN:n + e或者n + 2e;用于UDG和UDN:n + 2e,二、存储空间,存储结构的比较,三、对操作的支持,1、对顶点的访问,locateVex(u); /返回u的位置,getVex(v); / 返回 v 的值。,putVex(u, value); / 对 u 赋值value。,存储结构的比较,2、插入和删除顶点,都是对存放顶点数组元素的操作 但是对邻接矩阵,还要修改邻接矩阵,insertVex(v); /在图G中增添新顶点v。,deleteVex(v); / 删除G中顶点v及其相关的弧。,存储结构的比较,3、插入和删除弧

13、,insertArc(v, w);,deleteArc(v, w);,邻接矩阵:修改边(以及) 邻接表:无向图,修改两个顶点的链表;有向图,修改一个(或两个)顶点的链表,存储结构的比较,4、邻接点,firstAdjVex(v); / 返回 v 的“第一个邻接点”。若没有邻接点,则返回-1。,nextAdjVex(v, w); / 返回 v 的(相对于 w 的) “下一个邻接 点”。若 w 是 v 的最后一个邻接点,则返回-1。,存储结构的比较,邻接矩阵:第v行 邻接表:第v个链表,5、邻接边,课堂练习,V1,V2,V3,V4,V5,1、邻接矩阵,2、邻接表,V2,V1,V4,V3,1、邻接矩阵

14、,2、邻接表,课堂练习,下面关于图的存储的叙述中正确的是( ) A)用相邻矩阵法存储图,占用的存储空间大小只与图中节点个数有关,而与边数无关 B)用相邻矩阵法存储图,占用的存储空间大小只与图中边数有关,而与节点个数无关 C)用邻接表法存储图,占用的存储空间大小只与图中节点个数有关,而与边数无关 D)用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与节点个数无关,课堂练习,用java语言描述存储结构,1、邻接点函数的实现,2、创建图,3、图的存储方式的转换(自学),邻接点函数的实现,firstAdjVex(A),firstAdjVex(B),nextAdjVex(A, 1);,nextA

15、djVex(B, 4);,邻接点函数的实现,int firstAdjVex(int v)Arc p;p=vertexsv.firstarc; /v的第1个邻接点if(p=null) return -1; /无邻接点return p.adjvex; ,邻接点函数的实现,int nextAdjVex(int v, int w)Arc p=vertexsv.firstArc; /v的第1个邻接点while(p!=null ,创建图,输入边形式1: .,输入边形式2: .,输入顶点: A B C,1、图的两个个参数:,顶点个数,边数(弧数),vertex(Vertices),vexNum,edge(a

16、rc),arcNum,edgeNum,2、图的第三个参数:,图的类型,graphKind=DG, UDG, DN, UDN,创建图,1、输入参数:vexNum, arcNum, graghKind,2、输入顶点信息,3、根据GraghKind,决定边是否要带权重,4、采用某种形式逐条输入边,将它插入到存储结构中,建立存储结构的一般步骤:,创建图,void createGragh( ) /建立邻接表 /输入顶点数vexNum,边的条数arcNum,图的类型graghKind。 ifswitch(graghKind)case DG: return CreateDG( );case DN: retu

17、rn CreateDN( );case UDG: return CreateUDG( );case UDN: return CreateUDN( );default: return ERROR; ,创建图,void createDG( )for(i=0;i为输入的弧信息p= new arcNode; /建立节点if(!p) return ERROR;p.adjVex=w;p.nextArc=verticesv.firstarc; /顶点v的链表verticesv.firstArc=p; /添加到最左边 ,创建图,void createUDG( )for(i=0;ivexNum;i+) /输入顶

18、点信息,data为输入的顶点数据verticesi.data = data ,创建图,public void addEdge(int start, int end)Arc p=new Arc(end);p.nextArc=vertexsstart.firstArc;vertexsstart.firstArc=p;Arc q=new Arc(start);q.nextArc=vertexsend.firstArc;vertexsend.firstArc=q; ,时间复杂度分析(第2种输入形式)第1个for: n第2个for: e 所以O(n + e),时间复杂度分析(第1种输入形式)第1个for

19、: n第2个for: n.e 所以O(n.e),创建图,存储结构的转换,void TranslateDG(ALGraph G1, MGraph G2)/设置参数G2.GraghKind = G1.GraghKind;G2.vexNum = G1.vexNum;G2.arcNum = G1.arcNum/复制顶点for(i=0;iG1.vexNum;i+) G2.vexsi = G1.verticesi.data;/复制弧for(i=0;iG2.vexNum;i+)for(j=0;jG2.vexNum;j+)G2.arcsij=0; ,for(i=0;iG1.vexNum;i+) /复制G1每个顶点的邻接点p=G1.verticesi.firstarc;while(p)G2.arcsip.adjvex=1;p=p.nextarc;,存储结构的转换,void TranslateDG(ALGraph G1, MGraph G2),小结,1.图的基本概念以及图的特点,2.图的存储表示:,(1)图的数组(邻接矩阵)存储表示,(2)图的邻接表存储表示,3.用java语言描述图的存储结构,(3)图的存储结构的比较,(1)firstAdjVex和nextAdjVex,(2)创建图,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报