71图的定义和术语课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《71图的定义和术语课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 71 定义 术语 课件
- 资源描述:
-
1、第七章第七章 图图v图图(Graph)由一个由一个顶点集顶点集V V和一个和一个边集边集E E构成的数构成的数据结构。据结构。Graph=(V,E)其中,其中,V V=x x|x x 某个数据对象某个数据对象 是非空有限的顶点集合;是非空有限的顶点集合;E E=(=(x x,y y)|)|x x,y y V V 或或 E E=y|x x,y y V V&PathPath(x x,y y)是有限的顶点之间关系的集合,是有限的顶点之间关系的集合,(x,y)x,y)也叫做也叫做边边(edge)edge)集集合合,它是无方向的它是无方向的;PathPath(x x,y y)表示从表示从 x x 到到
2、y y 的一条单向的一条单向通路通路,它是有方向的它是有方向的,所以所以 x,y也叫做也叫做弧弧(arc)arc)的集合的集合,x x称称为弧尾或始点为弧尾或始点,y y称为弧头或终点称为弧头或终点.v有向图有向图有向图有向图G G是由两个集合是由两个集合V(G)V(G)和和E(G)E(G)组成的组成的其中:其中:V(G)V(G)是顶点的非空有限集是顶点的非空有限集 E(G)E(G)是有向边(也称是有向边(也称弧弧)的有限集合,弧是顶点的)的有限集合,弧是顶点的有序对,记为有序对,记为 v,w,v,wv,w是顶点,是顶点,v v为弧尾,为弧尾,w w为弧头为弧头v无向图无向图无向图无向图G G
3、是由两个集合是由两个集合V(G)V(G)和和E(G)E(G)组成的组成的 其中:其中:V(G)V(G)是顶点的非空有限集是顶点的非空有限集 E(G)E(G)是边的有限集合,边是顶点的无序对,是边的有限集合,边是顶点的无序对,记为(记为(v,wv,w)或(或(w,v)w,v),并且(并且(v,w)=(w,v)v,w)=(w,v)例例7.1245136G1图图G1中:中:V(G1)=1,2,3,4,5,6 E(G1)=,例例7.2157324G26图图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)v
4、无向完全图无向完全图(Completed graph)n个顶点的无向图有个顶点的无向图有n(n-1)/2条边(条边(最大边数是最大边数是n(n-1)/2)v有向完全图有向完全图n个顶点的有向图,有个顶点的有向图,有n(n-1)条边(条边(最最大边数是大边数是n(n-1))v稀疏图稀疏图(sparse graph)sparse graph):边或弧很少的图边或弧很少的图,通常边数通常边数 nlognlog2 2n nv稠密图稠密图(Dense graph)Dense graph)无向图中,边数接近无向图中,边数接近有向图中,边数接近有向图中,边数接近有向完全图有向完全图无向图无向图(树树)有向图
5、有向图完全图完全图无向无向 完全图完全图v权权与图的边或弧相关的数与图的边或弧相关的数v网网带权的带权的有向有向图叫有向网,带权的无向图图叫有向网,带权的无向图叫无向网叫无向网v子图子图如果图如果图G(V,E)和图和图G(V,E),满足:满足:V V,E E 则称则称G为为G的子图的子图关联关联v顶点的度(于树的度不同)顶点的度(于树的度不同)无向图中,顶点的度为与每个顶点相连的边数无向图中,顶点的度为与每个顶点相连的边数,记记作作TD(v)有向图中,顶点的度分成入度与出度有向图中,顶点的度分成入度与出度入度:以该顶点为头的弧的数目入度:以该顶点为头的弧的数目,记为记为ID(v)出度:以该顶点
6、为尾的弧的数目出度:以该顶点为尾的弧的数目,记为记为OD(v)一个顶点的度数等于该顶点的入度与出度之和一个顶点的度数等于该顶点的入度与出度之和,即即TD(v)=OD(v)+ID(v)niivTDe1)(21v路径路径路径是顶点的序列路径是顶点的序列V=Vi0,Vi1,V=Vi0,Vi1,VinVin,满足满足(V Vij-1ij-1,V,Vijij)E E 或或 E,(1jE,(1j n)n)v路径长度路径长度沿路径边的数目或沿路径各边权值之沿路径边的数目或沿路径各边权值之和和v简单路径简单路径序列中顶点不重复出现的路径序列中顶点不重复出现的路径v回路回路(环环)第一个顶点和最后一个顶点相同的
7、路第一个顶点和最后一个顶点相同的路径径v简单回路简单回路(简单环简单环)除了第一个顶点和最后一个除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路顶点外,其余顶点不重复出现的回路V0V1V3V2V0V1V3V2V0V1V2V0V1V3V0ABCDEHMFGIJLK无向图无向图G的三个连通分量的三个连通分量ABCDEFGIJLHMK无向图无向图G强连通图强连通图 有向图有向图G 有向图有向图G的两的两个个 强强连通分量连通分量12431234v生成树生成树:ABCDEHMABCDEHM无向图无向图G 无向图无向图G的生成树的生成树 v生成森林生成森林:有向图有向图G的生成森林的生成森林有向
8、图有向图G本章只讨论本章只讨论简单图简单图,有两类图形不在本章讨论之列:有两类图形不在本章讨论之列:ADT Graph 数据对象数据对象V:v v是具有相同特性的数据元素的集合,称为是具有相同特性的数据元素的集合,称为顶点集。顶点集。数据关系数据关系 R R:R=VRR=VR;VR=VR=|v,wV|v,wV 且且 P(v,w)P(v,w),表示从表示从v v到到w w的弧,的弧,谓词谓词P(v,w)P(v,w)定义了弧定义了弧 v,w的意义或信息的意义或信息 基本操作基本操作P P:CreatGraph(&G,V,VR)/按定义按定义(V,VR)构造图构造图DestroyGraph(&G):
9、/销毁图基本操作基本操作LocateVex(G,u);/若若G中存在顶点中存在顶点u,则返回该顶点在则返回该顶点在 图中图中“位置位置”;否则返回其它信息。否则返回其它信息。GetVex(G,v);/返回返回 v 的值。的值。PutVex(&G,v,value);/对对 v 赋值赋值value。FirstAdjVex(G,v);/返回返回 v 的的“第一个邻接点第一个邻接点”。若该顶点。若该顶点/在在 G 中没有邻接点,则返回中没有邻接点,则返回“空空”。NextAdjVex(G,v,w);/返回返回 v 的(相对于的(相对于 w 的)的)“下一个邻接下一个邻接 点点”。若。若 w 是是 v
10、的最后一个邻接点,则返回的最后一个邻接点,则返回“空空”。基本操作基本操作InsertArc(&G,v,w);/在在G中增添弧中增添弧,若若G是无向的,是无向的,/则还增添对称弧则还增添对称弧。DeleteArc(&G,v,w);/在在G中删除弧中删除弧,若若G是无向的,是无向的,/则还删除对称弧则还删除对称弧。DeleteVex(&G,v);/删除删除G中顶点中顶点v及其相关的弧。及其相关的弧。InsertVex(&G,v);/在图在图G中增添新顶点中增添新顶点v。基本操作基本操作DFSTraverse(G,v,Visit()/从顶点从顶点v v起深度优先遍历图起深度优先遍历图G G,并对每
11、个顶点调并对每个顶点调用函数用函数VisitVisit一次且仅一次一次且仅一次。BFSTraverse(G,v,Visit()/从顶点从顶点v v起广度优先遍历图起广度优先遍历图G G,并对每个顶点并对每个顶点调用函数调用函数VisitVisit一次且仅一次。一次且仅一次。图的四种常用的存储形式:图的四种常用的存储形式:邻接矩阵和加权邻接矩阵邻接矩阵和加权邻接矩阵(labeled adjacency matrix)邻接表邻接表十字链表十字链表邻接多重表邻接多重表一、一、(加权加权)邻接矩阵(邻接矩阵(labeled adjacency matrix),0),(,1 .G否则否则或者或者如果如果
12、EjiEjijiarcs0101101101011110.1arcsG无向图无向图G10001000100100100000001010.2arcsG有向图有向图G2 一、一、(加权加权)邻接矩阵(邻接矩阵(continue)一、一、(加权加权)邻接矩阵(邻接矩阵(continue)njijiavID1)(njijiavOD1)(定义为:定义为:G.arcs i j=Wij 或(或(vi,vj)VR 无边(弧)无边(弧)以有向网为例:以有向网为例:邻接矩阵:N.Edge=(v1 v2 v3 v4 v5 v6 )顶点表:5v1v2v3v4v5v6489755613N 5 7 4 8 9 5 6
13、5 3 1 一、一、(加权加权)邻接矩阵(邻接矩阵(continue)容易实现图的操作,如:求某顶点的容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。接点等等。n n个顶点需要个顶点需要n n*n n个单元存储边个单元存储边(弧弧););空间效率为空间效率为O(nO(n2 2)。对稀疏图而言尤其浪费空间对稀疏图而言尤其浪费空间。邻接矩阵法邻接矩阵法优点:优点:邻接矩阵法邻接矩阵法缺点:缺点:一、一、(加权加权)邻接矩阵(邻接矩阵(continue)#define INFINITY INT_MAX#define MAX
14、_VERTEX_NUM 20typedef enumDG,DN,UDG,UDN GraghKind;typedef struct ArcCell /弧的定义弧的定义 VRType adj;/VRType是顶点关系类型。是顶点关系类型。/对无权图,用对无权图,用1或或0表示相邻否表示相邻否;/对带权图,则为权值类型。对带权图,则为权值类型。InfoType *info;/该弧相关信息的指针该弧相关信息的指针 ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct /图的定义图的定义 VertexType vexsMAX_VERTE
15、X_NUM;/顶点顶点信息信息 AdjMatrix arcs;/弧的信息弧的信息 int vexnum,arcnum;/顶点数,弧数顶点数,弧数 GraphKind kind;/图的种类标志图的种类标志 MGraph;Status CreateUDN(Mgraph&G)/用邻接矩阵表示用邻接矩阵表示return OK;例:用邻接矩阵生成无向网的算法例:用邻接矩阵生成无向网的算法(参见教材(参见教材P162)scanf(&G.vexnum,&G.arcnum,&IncInfo);/输入总顶输入总顶点数,总弧数和信息点数,总弧数和信息for(i=0;iG.vexnum,;+i)scanf(&G.v
16、exsi);/输入顶输入顶点值,存入一维向量中点值,存入一维向量中for(i=0;iG.vexnum;+i)/对邻接矩阵对邻接矩阵n n*n n个单元初个单元初始化,始化,adj=,info=NULL for(j=0;jG.vexnum;+j)G.arcsij=INFINITY,NULL;for(k=0;kG.arcnum;+k)/给弧赋初值给弧赋初值(循环次数循环次数弧数弧数)scanf(&v1,&v2,&w);i=LocateVex(G,v1);j=LocateVex(G,v2);/找到两顶点在矩阵中的位置找到两顶点在矩阵中的位置(n n次次)G.arcsij.adj=w;/输入对应权值输
17、入对应权值 If(IncInfo)Input(*G.arcsij.info);G.arcsji=G.arcs i j;/无向网是对称矩阵无向网是对称矩阵 对于对于n n个顶点个顶点e e条弧的网,条弧的网,建网时间效率建网时间效率=O(nO(n2 2+n+e+n+e*n)n)int firstAdjVex(Mgraph G,int v)/返回顶点返回顶点v的第一个邻接点,的第一个邻接点,G为无向图为无向图 for(k=0;k0 )break;if(k=G.vexnum)k=-1;/无邻接点无邻接点return k;/end firstAdjVex()图的部分操作在邻接矩阵上的实现图的部分操作在
18、邻接矩阵上的实现、0123413341420注:邻接表不唯一,因各个边结点的链入顺序是任意的。注:邻接表不唯一,因各个边结点的链入顺序是任意的。v1v2v3v4v5231420v1v2v3v5v4v4data:结点的数据域,保存结点的数据值。结点的数据域,保存结点的数据值。firstarc:结点的指针域,给出自该结点出发的的第一条边结点的指针域,给出自该结点出发的的第一条边 的边结点的地址。的边结点的地址。头结点头结点:datafirstarcadjvexnextarc表结点表结点:adjvex:该边或弧所指向的顶点的位置该边或弧所指向的顶点的位置.nextarc:指向下一条边或弧的指针指向下
19、一条边或弧的指针.、adjvexnextarcdatafirstarc、0123413341420v1v2v3v4v5231420v1v2v3v5v4v4v1v2v3v4V4V3V2V12301V4V3V2V13020邻接表邻接表(出边出边)逆邻接表逆邻接表(入边入边)01230123用用邻接表表示有向图时邻接表表示有向图时,若不考虑逆邻接表,只需,若不考虑逆邻接表,只需 n n 个顶点结点,个顶点结点,e e 个边结点。个边结点。带权图的边结点中保存该边上的权值带权图的边结点中保存该边上的权值 costcost/边结点定义边结点定义typedef struct ArcNode int adj
20、vex;/该弧所指向的顶点的位置该弧所指向的顶点的位置 struct ArcNode *nextarc;/指向下一条弧的指针指向下一条弧的指针 InfoType *info;/该弧相关信息的指针该弧相关信息的指针 ArcNode;adjvex info nextarc/头结点定义头结点定义typedef struct VNode VertexType data;/顶点信息顶点信息 ArcNode *firstarc;/指向第一条依附该顶指向第一条依附该顶点的弧点的弧 VNode,AdjListMAX_VERTEX_NUM;data firstArc/图的定义图的定义typedef struct
21、 AdjList vertices;int vexnum,arcnum;int kind;/图的种类标志图的种类标志 ALGraph;int firstAdjVex(ALGraph ghead,int v)return gheadv-firstArc.adjvex;/end firstAdjVex()int nextAdjVex(ALGraph ghead,int v,int w)p=gheadv-firstArc;while(p&p-adjvex!=w)p=p-next;if(!p)return 0;else return p-next-adjvex;/end nextAdjVex()找某顶
22、点的所有邻接点的时间复杂度是找某顶点的所有邻接点的时间复杂度是O(e)如何建立邻接表(以有向图为例)如何建立邻接表(以有向图为例)算法思想:算法思想:首先将邻接表表头数组初始化,首先将邻接表表头数组初始化,vertexvertex域初始域初始化为化为i i,firstarcfirstarc初始化为初始化为NULLNULL;然后对读入的每一条弧然后对读入的每一条弧 i,j,产生一个表结产生一个表结点,点,adjveradjver域置为域置为j j,并将结点链接到邻接表的并将结点链接到邻接表的第第i i个链表中。个链表中。算法如下:算法如下:Void GreatAdjList(ALGraph&G)
23、ArcNode *p;sacnf(“%d%d”,&n,&e);G.vexnum=n;G.arcnum=e;for(i=0;in;i+)G.verticesi.vertex=i;G.verticesi.firstarc=NULL;for(k=0;kadjvex=j;p-nextarc=G.verticesi.firstarc;G.verticesi.firstarc=p;/GreatAdjList讨论:邻接表与邻接矩阵的比较讨论:邻接表与邻接矩阵的比较1.1.联系:联系:都可以用来存储有向图和无向图;邻接表中都可以用来存储有向图和无向图;邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个每个链
24、表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。数等于一行中非零元素的个数。2.2.区别:区别:邻接矩阵是顺序结构,邻接表是链式结构邻接矩阵是顺序结构,邻接表是链式结构对于任一确定的无向图,邻接矩阵是唯一的(行列对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。与顶点编号无关)。邻接矩阵的空间复杂度为邻接矩阵的空间复杂度为O(nO(n2 2),),而邻接表的空间复杂而邻接表的空间复杂度为度为O(n+e)O(n+e)。邻接矩阵多用于稠密图的存储(邻接矩阵多用于稠密图的存储(e e
25、接近接近n(n-1)/2)n(n-1)/2);而邻接表多用于稀疏图的存储(而邻接表多用于稀疏图的存储(enen2 2)三、三、邻接多重表邻接多重表(无向图无向图的一种存储结构的一种存储结构)在在无向图无向图的邻接表中的邻接表中,一条边出现两个单链表中一条边出现两个单链表中.浪费浪费空间,也给某种操作带来了困难。空间,也给某种操作带来了困难。在邻接多重表中,每一条边只有一个结点在邻接多重表中,每一条边只有一个结点(称边结点称边结点)为有关边的处理提供了方便。为有关边的处理提供了方便。mark ivex jvex ilink jlinkEbox:三、三、邻接多重表邻接多重表(无向图无向图的一种存储
展开阅读全文