最新图的基本概念及基本操作ppt课件

上传人:壹****1 文档编号:570258286 上传时间:2024-08-03 格式:PPT 页数:37 大小:549KB
返回 下载 相关 举报
最新图的基本概念及基本操作ppt课件_第1页
第1页 / 共37页
最新图的基本概念及基本操作ppt课件_第2页
第2页 / 共37页
最新图的基本概念及基本操作ppt课件_第3页
第3页 / 共37页
最新图的基本概念及基本操作ppt课件_第4页
第4页 / 共37页
最新图的基本概念及基本操作ppt课件_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《最新图的基本概念及基本操作ppt课件》由会员分享,可在线阅读,更多相关《最新图的基本概念及基本操作ppt课件(37页珍藏版)》请在金锄头文库上搜索。

1、图的基本概念及基本操作图的基本概念及基本操作18、图的基本概念、图的基本操作,、图的基本概念、图的基本操作,以及图的对象抽象模型以及图的对象抽象模型掌握图的定义、结点、边、弧、邻接、关掌握图的定义、结点、边、弧、邻接、关联、度、权、路径、子图、连通等有关术联、度、权、路径、子图、连通等有关术语及其图的检索、插入、删除、求邻接点、语及其图的检索、插入、删除、求邻接点、关联边、图的遍历等基本操作关联边、图的遍历等基本操作,了解图结,了解图结点抽象模型、图的边对象抽象模型和图对点抽象模型、图的边对象抽象模型和图对象的抽象模型象的抽象模型2 例例181设设有有两两个个二二元元组组G1=(V1,R1)与

2、与G2=(V2,R2),其其中,中, V1=1,2,3,4,5R1=VR1VR1=,V2=a,b,c,dR2=VR2VR2=(a,b),(a,d),(b,d),(d,c) 显然,它们不满足线性结构、广义表和树的定义,而显然,它们不满足线性结构、广义表和树的定义,而满足图的定义。满足图的定义。1 125 54 43 3a a b bc cd d94邻接、关联邻接、关联对图中任意结点对图中任意结点x与与y,若它们之间存在边(即有,若它们之间存在边(即有,或,或),则称),则称x与与y邻接邻接(adjacent),它们互为邻接点。同时称,它们互为邻接点。同时称x或或y与边与边(或(或或或(x,y))

3、关联)关联(incident)。5度度对任一结点对任一结点x,称以它为头的弧的个数为它的入度,称以它为头的弧的个数为它的入度(Indegree);称以它为尾的弧的个数为它的;称以它为尾的弧的个数为它的出度出度(outdegree);称它的入度与;称它的入度与出度之和为它的出度之和为它的度度(degree)。对无向图,无出度入度之分,直接。对无向图,无出度入度之分,直接称与它关联的边的个数为它的度。称与它关联的边的个数为它的度。例如,图例如,图6-1(a)中的结点中的结点1的出的出度与入度都为度与入度都为2,结点,结点3的出度入度分别为的出度入度分别为1和和0,(b)中的结点中的结点a、b、度均

4、为、度均为2,而,而d的度为的度为3 3,c的度为的度为1。106权权权权(Weight)与哈夫曼树中的概念相同,即权是一个数值量,与哈夫曼树中的概念相同,即权是一个数值量,是某些信息的数字化抽象。权分边权与结点权,分别是边与结点是某些信息的数字化抽象。权分边权与结点权,分别是边与结点的问题世界所关心的信息的数值化表示。例如,若结点代表城市,的问题世界所关心的信息的数值化表示。例如,若结点代表城市,则边权可代表城市之间的交通费用。则边权可代表城市之间的交通费用。7路径(通路)路径(通路)对有向图,若存在弧序列对有向图,若存在弧序列,且且n1,则称从,则称从x0到到xn有通路(路径)有通路(路径

5、)(Path)。上列序列称。上列序列称为为x0到到xn的路径。该路径也可表示为的路径。该路径也可表示为(x0,x1,xn)11对无向图,若有边序列对无向图,若有边序列(x0,x1),(x1,x2),(xn-1,xn)且且n1,则称,则称x0与与xn之间有路径(通路),该路径可用上列之间有路径(通路),该路径可用上列边序列表示,亦可用下列结点序列表示边序列表示,亦可用下列结点序列表示(x0,x1,xn)路径中边的数目称为路径中边的数目称为路径长路径长。若若x0=xn,则称相应的路径为,则称相应的路径为回路回路/环路环路(loop)。若在路径若在路径(x0,x1,xn)中,除中,除x0与与xn外,

6、任意其它结外,任意其它结点均不相同,则称该路径为点均不相同,则称该路径为简单路径简单路径(SimplePath)。起点。起点与终点重合的简单路径称为与终点重合的简单路径称为简单回路简单回路(SimpleLoop)。 U U显然,简单路径中不含回路。显然,简单路径中不含回路。128子图子图/生成图生成图 若若某某图图G的的结结点点集集合合与与边边集集合合分分别别是是另另一一图图G的的结结点点集集合和边集合的子集,则称合和边集合的子集,则称G为为G的的子图子图(Subgraph)。 设设有有两两个个图图G与与G,若若它它们们的的结结点点集集合合相相同同,但但G的的边边集集合合是是G的的边边集集合合

7、的的子子集集,则则称称G是是G的的生生成成图图(SpanningGraph)。显然,生成图一定是子图,但反之未必。显然,生成图一定是子图,但反之未必。1310生成树生成树 无无回回路路的的连连通通的的无无向向图图的的生生成成图图,称称为为该该无无向向图图的的生生成成树树(SpanningTree)。 9连通连通若图中任意两结点若图中任意两结点x和和y,或,或x到到y有通路,或有通路,或y到到x有通路,有通路,则称该图是则称该图是(弱)连通的(弱)连通的(Connected);若;若x到到y有通路,且有通路,且y到到x有通路,则称该图是有通路,则称该图是强连通的强连通的(StronglyConn

8、ected)。若。若图中某子图是连通的,则称该子图为一个图中某子图是连通的,则称该子图为一个连通分量连通分量(ConnectedComponent)。若。若G的某子图的某子图G是连通的,并且,是连通的,并且,若将若将G中任意其他结点及其任意相关联的边加入到中任意其他结点及其任意相关联的边加入到G,都会导,都会导致致G不连通,那么称不连通,那么称G是一个是一个极大连通分量(极大连通分量(MaximumConnectedComponent)。显然极大连通分量不唯一。显然极大连通分量不唯一。14证:先归纳证明,边的个数不能少于结点数减证:先归纳证明,边的个数不能少于结点数减1(否(否则图就不连通了)

9、。再证明,边数必不大于结点数减则图就不连通了)。再证明,边数必不大于结点数减1,因为若有,因为若有n个结点,则有个结点,则有(n-1)条边就使这条边就使这n个结点个结点连通了,若再添加一条边,则这条边关联的两结点间连通了,若再添加一条边,则这条边关联的两结点间的路径就多于的路径就多于1条了,从而构成回路。综合这两个方条了,从而构成回路。综合这两个方面,就证得了本定理。面,就证得了本定理。参见参见p9图图定理定理7 1生成树中边的个数为结点个数生成树中边的个数为结点个数减减1.1518.2.2图的基本操作图的基本操作 图是一种与具体应用密切相关的结构,有关它的基本图是一种与具体应用密切相关的结构

10、,有关它的基本操作也往往随应用不同而出入很大操作也往往随应用不同而出入很大. . 检索:检索:按结点编号或内容检索结点位置按结点编号或内容检索结点位置按边的两顶点检索边按边的两顶点检索边插入:插入:插入结点插入结点插入边插入边删除:删除:删除结点及与其关联的边删除结点及与其关联的边删除边删除边16求邻接点、关联边求邻接点、关联边求度(入度与出度)求度(入度与出度)求路径求路径图的遍历图的遍历求子图求子图求生成图求生成图求连通分量求连通分量求拓扑序列(有向图)求拓扑序列(有向图)求(最小)生成树求(最小)生成树求关键路径求关键路径求最短路径求最短路径1718.3 18.3 图的对象抽象模型图的对

11、象抽象模型 这里,我们仅从逻辑关系出发,考虑这里,我们仅从逻辑关系出发,考虑图结点和整个图对象应具有的性质。由图结点和整个图对象应具有的性质。由于图结点的关系不象其他结构中结点那于图结点的关系不象其他结构中结点那样有限制,所以它的抽象结构比较复杂。样有限制,所以它的抽象结构比较复杂。18 为为了了后后面面的的使使用用,首首先先定定义义一一个个枚枚举举类类型型和常量:和常量:enumTTraverseModeDFS,WFS;/定义枚举类型,表示图遍历方式定义枚举类型,表示图遍历方式 constCNST_NumNodes=100;/定义常量,表示最大结点个数。实际定义常量,表示最大结点个数。实际结

12、点个数可以小于该数结点个数可以小于该数1918.3.1图结点抽象模型图结点抽象模型 图结点抽象模型重点是描述图结图结点抽象模型重点是描述图结点的内容,隐蔽具体的图结点的结构。点的内容,隐蔽具体的图结点的结构。所以,图结点对象模型中,重点是关所以,图结点对象模型中,重点是关于结点信息的于结点信息的Get和和Set类操作。类操作。下面是图结点的描述:下面是图结点的描述:20template/结点内容的类型(可变类型)结点内容的类型(可变类型) structTGraphNode0/图结点类图结点类longno;/图结点的编号图结点的编号floatweight;/结点的权结点的权TEleminfo;/

13、图结点的内容图结点的内容virtuallongGetNo()returnno;virtualvoidSetNo(longmNo)no=mNo;virtualTElem&GetElem()returninfo;virtualTElem&SetElem(TElem&e)info=e;returninfo;virtualfloatGetWeight()returnweight;virtualfloatSetWeight(TElem&w)weight=w;returnweight;21 该该类类的的各各基基本本操操作作都都已已在在类类定定义义中中实实现现,所所以以已已不不属属于于抽抽象象类类,但但其其

14、在在整整个个图图类类中中,扮扮演演抽抽象象类类的的作用。该类中主要成员说明如下:作用。该类中主要成员说明如下:GetNo():返回本结点的编号。:返回本结点的编号。SetNo(longmNo):将:将mNo做为本结点的编号值。做为本结点的编号值。 GetElem():返回本结点的值。:返回本结点的值。SetElem(TELem&e):将:将e做为本结点做为本结点的元素值。的元素值。 GetWeight():返回本结点的权值。:返回本结点的权值。 SetWeight(TELem&w):将:将w做为本结点的权值。做为本结点的权值。2218.3.2图的边对象抽象模型图的边对象抽象模型 边实质上就是元

15、素间的关系。在图中,边不仅仅边实质上就是元素间的关系。在图中,边不仅仅表达的是逻辑关系,它本身也可以具有其他的属性,表达的是逻辑关系,它本身也可以具有其他的属性,如权值。因此,有必要专门建立针对图的边的对象模如权值。因此,有必要专门建立针对图的边的对象模型。型。 与结点类与结点类TgraphNode0类似似,该类的成员函数也,该类的成员函数也都实现,在语法上不属于抽象类。都实现,在语法上不属于抽象类。23templatestructTGraphEdge0/图边抽象类图边抽象类longstartNo,endNo;/边的起点和终点边的起点和终点floatweight;/边权边权TEleminfo;

16、/边的内容边的内容virtualTElem&GetElem()returninfo;/读边内容读边内容virtualTElem&SetElem(TElem&e)info=e;returninfo;/置边置边 virtualfloatGetWeight()returnweight;/读边权读边权virtualfloatSetWeight(TElem&w)weight=w;returnweight;/置边置边权权virtuallongGetStartNo()returnstartNo;/读边的起点编号读边的起点编号virtuallongGetEndNo()returnendNo;/读边的终点编号读

17、边的终点编号virtualvoidSetStartNo(longmNo)startNo=mNo;/置边的起点编置边的起点编 virtualvoidSetEndNo(longmNo)endNo=mNo;/置边的终点编号置边的终点编号;2418.3.3图抽象对象模型图抽象对象模型 图抽象模型重点是定义针对图的整体结构图抽象模型重点是定义针对图的整体结构的操作。根据前面分析,图的整体方面的操作的操作。根据前面分析,图的整体方面的操作主要有遍历、查找、求路径、求生成树、求拓主要有遍历、查找、求路径、求生成树、求拓扑序列(有向图)、求关键路径、求最短路径、扑序列(有向图)、求关键路径、求最短路径、求最小

18、生成树等。下面是具体的抽象模型。求最小生成树等。下面是具体的抽象模型。25template/用到两个可变类型,分别是用到两个可变类型,分别是图结点内容和边内容图结点内容和边内容classTGraph0/图抽象类图抽象类public:longnumNodes;virtuallongGetNodeNo(TGraphNode0*pNode);virtualTGraphNode0*GetNodeAddress(longnodeNo);virtualTGraphNode0*GetSucc(TGraphNode0*pNode,longsucNo)=0;virtualTGraphNode0*GetPrior

19、(TGraphNode0*pNode,longpreNo)=0;virtualTGraphNode0*SetSucc(TGraphNode0*pNode,longsucNo,TGraphNode0*pNode)=0;virtualTGraphNode0*SetPrior(TGraphNode0*pNode,longpreNo,TGraphNode0*pNode)=0;26virtualTGraphEdge0*GetSuccEdge(TGraphNode0*pNode,longsucNo)=0;virtualTGraphEdge0*GetPriorEdge(TGraphNode0*pNode,l

20、ongpreNo)=0;virtuallongGetInDegree(TGraphNode0*pNode)=0;virtuallongGetOutDegree(TGraphNode0*pNode)=0;virtuallongCluster(longv0,long*nos,TTraverseModetm)=0;virtuallongGetNumNodes()returnnumNodes;virtualTGraphNode0*AddNode(longmNo,TElem&nodeInfo)=0;virtualTGraphEdge0*AddEdge(longstartNo,longendNo,TEdg

21、eElem*pee=NULL)=0;virtualTGraphNode0*DeleteNode(longmNo)=0;virtualTGraphEdge0*DeleteEdge(longstartNo,longendNo)=0;virtuallongCluster(TGraphNode0*pStartNode,TElem*e,TTraverseModetm)=0;27 virtuallongCluster(TGraphNode0*pStartNode,TGraphNode0*Nodes,TTraverseModetm)=0;virtualTGraphNode0*Locate(longnNo)=

22、0;virtualTGraphEdge0*Locate(longstartNo,longendNo)=0;virtualTGraphNode0*Locate(TElem&e,TTraverseModetm,longsn=1)=0;virtuallongGetPath(longstartNo,longendNo,longsn,long*pathNodeNo)=0;virtuallongGetPath(longstartNo,longendNo,longsn,TGraphNode0*pathNode)=0;virtuallongGetPathShortest(longstartNo,TDijkPa

23、th*path)=0;virtuallongGetPathShortest(long*path)=0;28 其中主要成员说明如下。其中主要成员说明如下。GetNodeNo(TGraphNode0*pNode):返回地址为:返回地址为pNode的结点的编号。的结点的编号。GetNodeAddress(longnodeNo):返返回回编编号号为为nodeNo的的结结点点的的地址。地址。 有有了了这这两两个个函函数数,就就可可以以自自由由地地由由结结点点的的编编号号,求求得得其其地地址址,或反过来。或反过来。GetSucc(longnodeNo,longsucNo):返返回回编编号号为为nodeNo

24、的的结点的第结点的第sucNo个后继结点的地址。个后继结点的地址。GetPrior(long nodeNo, long preNo):返返回回返返回回编编号号为为nodeNo的结点的第的结点的第preNo个前驱结点的地址。个前驱结点的地址。SetSucc(longnodeNo,longsucNo,TGraphNode*pNode):将编号为:将编号为nodeNo的结点设置为本结点的第的结点设置为本结点的第sucNo个后继。个后继。29SetProir(longnodeNo,longpreNo,TGraphNode*pNode):将编号为:将编号为nodeNo的结点设置为本结点的第的结点设置为本

25、结点的第preNo个前驱。个前驱。GetSuccEdge(longnodeNo,longsucNo):返回编号为:返回编号为nodeNo的结点的第的结点的第sucNo个结点的地址。:个结点的地址。:和和GetPriorEdge(longnodeNo,longsucNo)。GetInDegree(longnodeNo):返回编号为:返回编号为nodeNo的结的结点的入度值。点的入度值。GetOutDegree(longnodeNo):返回编号为:返回编号为nodeNo的结的结点的出度值。点的出度值。AddNode(mNo,nodeInfo):给图加入一个结点。结点的:给图加入一个结点。结点的编号

26、为编号为mNo,值为,值为nodeInfo。30AddEdge(startNo,endNo,pee):给图增加一条边。边的起:给图增加一条边。边的起点和终点分别为点和终点分别为startNo和和endNo,边的内容为,边的内容为pee所指内所指内容,其为空时表示暂不设置边内容。当容,其为空时表示暂不设置边内容。当startNo或或endNo不不存在时,该函数还负责加入相应的结点。存在时,该函数还负责加入相应的结点。DeleteNode(mNo):删除编号为:删除编号为mNo的结点,并将其值存的结点,并将其值存储在一个临时的缓冲区,返回该缓冲区的地址。储在一个临时的缓冲区,返回该缓冲区的地址。D

27、eleteEdge(startNo,endNo):删除两端点的编号分别为:删除两端点的编号分别为startNo和和endNo的边,并将其值存储在一个临时的缓冲区,的边,并将其值存储在一个临时的缓冲区,返回该缓冲区的地址。返回该缓冲区的地址。Cluster(longv0,TElem*e,TTraverseModetm):串行化聚集:从结点:串行化聚集:从结点v0出发,按出发,按tm方式遍历图,将遍历到的结点的内容的地址依次存于方式遍历图,将遍历到的结点的内容的地址依次存于e中,中,并返回所遍历到的结点的个数。并返回所遍历到的结点的个数。31Locate(longstartNo,longendNo

28、):边定位:返回两端点编:边定位:返回两端点编号分别为号分别为startNo和和endNo的边的指针。的边的指针。Locate(TElem&e,TTraverseModetm,longsn=1):结点内:结点内容定位:返回结点内容为容定位:返回结点内容为e的(在遍历方式的(在遍历方式tm下的)第下的)第sn个个结点的指针。结点的指针。sn0时表示正数(第一次遍历到的内容为时表示正数(第一次遍历到的内容为e的的结点的对应结点的对应sn为为1,余递增),余递增),sn0时表示倒数(最后遍历时表示倒数(最后遍历到的内容为到的内容为e的结点的对应的结点的对应sn为为-1,余为,余为-2,等等)。等等)

29、。Cluster(longv0,long*nos,TTraverseModetm):与上:与上面的函数类似,不同的是将遍历到的结点的编号存于面的函数类似,不同的是将遍历到的结点的编号存于nos中。中。32GetPath(longstartNo,longendNo,longsn,long*pathNodeNo):求路径:求从:求路径:求从startNo(编号)到(编号)到endNo(编编号号)的第的第sn条路径,并将其上结点依次存入条路径,并将其上结点依次存入pathNodeNo中。这中。这里,所谓路径的次序(第里,所谓路径的次序(第sn条)条),是按从是按从startNo到到endNo的深的深

30、度优先次序。度优先次序。sn的含义同前。的含义同前。GetPath(longstartNo,longendNo,longsn,TGraphNode0*pathNode):与上面的函数类似,与上面的函数类似,不同的是将路径上的结点的指针存入不同的是将路径上的结点的指针存入pathNode。GetPathShortest(longstartNo,TDijkPath*path):生成单源:生成单源最短路径(从最短路径(从startNo到其余各点的最短路径)。到其余各点的最短路径)。GetPathShortest(long*path):生成多源最短路径(每对结:生成多源最短路径(每对结点讲间的最短路径

31、)点讲间的最短路径)33本讲小结本讲小结本讲介绍了图的基本概念,重点是有关图的术本讲介绍了图的基本概念,重点是有关图的术语和基本含义。要求掌握图、有向图语和基本含义。要求掌握图、有向图/无向图、无向图、结点、边、弧、邻接、关联、度、权、路径、结点、边、弧、邻接、关联、度、权、路径、子图、生成图、连通、生成树等概念。了解图子图、生成图、连通、生成树等概念。了解图的基本操作。另一个重点是掌握图的结点抽象的基本操作。另一个重点是掌握图的结点抽象模型、图的边的抽象模型,进而构建图凑向对模型、图的边的抽象模型,进而构建图凑向对象模型。了解图抽象对象模型中虚函数的功能。象模型。了解图抽象对象模型中虚函数的功能。接着讲图的两种存储结构,接着讲图的两种存储结构,并在两种存储结构上,考虑并在两种存储结构上,考虑其增、删功能的实现其增、删功能的实现34思考与练习思考与练习见第19讲3536结束语结束语谢谢大家聆听!谢谢大家聆听!37

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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