第七章 图精选PPT.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第七章 图精选PPT.ppt》由会员分享,可在线阅读,更多相关《第七章 图精选PPT.ppt(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 图图1第1页,本讲稿共71页7.1 图的基本概念图的基本概念图的定义和术语图的定义和术语图的基本操作图的基本操作2第2页,本讲稿共71页7.1.1 7.1.1 图的定义和术语图的定义和术语1 1图的定义图的定义 图图(Graph)是是由由非非空空的的顶顶点点集集合合和和一一个个描描述述顶顶点点之之间间关关系系边(或者弧)的集合组成,其形式化定义为:边(或者弧)的集合组成,其形式化定义为:G(V,E)Vvi|vi dataobject,E(vi,vj)|vi,vj V P(vi,vj)其其中中,G表表示示一一个个图图,V是是图图G中中顶顶点点的的集集合合,E是是图图G中中边边的的集
2、集合合,集集合合E中中P(vi,vj)表表示示顶顶点点vi和和顶顶点点vj之之间间有有一一条条直直接接连连线线,即即偶偶对对(vi,vj)表示一条边。表示一条边。3第3页,本讲稿共71页2.图的相关术语图的相关术语 无无向向图图。在在一一个个图图中中,如如果果任任意意两两个个顶顶点点构构成成的的偶偶对对(vi,vj)E是是无无序序的的,即即顶顶点点之之间间的的连连线线没没有有方方向向,则则称该图为无向图。称该图为无向图。有有向向图图。在在一一个个图图中中,如如果果任任意意两两个个顶顶点点构构成成的的偶偶对对(vi,vj)E是是有有序序的的,即即顶顶点点之之间间的的连连线线是是有有方方向向的的,
3、则称该图为有向图。则称该图为有向图。有向图G24第4页,本讲稿共71页 顶点、边、弧、弧头、弧尾。顶点、边、弧、弧头、弧尾。图中的数据元素图中的数据元素vi称称为顶点为顶点(vertex);P(vi,vj)表示在顶点表示在顶点vi和顶点和顶点vj之间有一条之间有一条直接连线。在无向图中称为边;有向图中称为弧。边用顶点直接连线。在无向图中称为边;有向图中称为弧。边用顶点的无序偶对(的无序偶对(vi,vj)来表示,顶点)来表示,顶点vi和顶点和顶点vj互为邻接点;互为邻接点;弧用顶点的有序偶对弧用顶点的有序偶对来表示,有序偶对的第一个结点来表示,有序偶对的第一个结点vi称为始点(或弧尾),在图中就
4、是不带箭头的一端;有序称为始点(或弧尾),在图中就是不带箭头的一端;有序偶对的第二个结点偶对的第二个结点vj称为终点(或弧头),在图中就是带箭称为终点(或弧头),在图中就是带箭头的一端。头的一端。无向完全图。无向完全图。在一个无向图中,如果任意两顶点都有在一个无向图中,如果任意两顶点都有一条直接边相连接,则该图为无向完全图。在一个含有一条直接边相连接,则该图为无向完全图。在一个含有n个个顶点的无向完全图中,有顶点的无向完全图中,有n(n-1)/2条边。条边。有向完全图。有向完全图。在一个有向图中,如果任意两顶点之间在一个有向图中,如果任意两顶点之间都有方向互为相反的两条弧相连接,则该图为有向完
5、全图。都有方向互为相反的两条弧相连接,则该图为有向完全图。在一个含有在一个含有n个顶点的有向完全图中,有个顶点的有向完全图中,有n(n-1)条边。条边。5第5页,本讲稿共71页 顶点的度、入度、出度。顶点的度、入度、出度。顶点的度(顶点的度(degree)是指依)是指依附于某顶点附于某顶点v的边数,通常记为的边数,通常记为TD(v)。在有向图中,要区。在有向图中,要区别顶点的入度与出度的概念。顶点别顶点的入度与出度的概念。顶点v的入度是指以顶点的入度是指以顶点 为终为终点的弧的数目。记为点的弧的数目。记为ID(v);顶点;顶点v出度是指以顶点出度是指以顶点v为始点为始点的弧的数目,记为的弧的数
6、目,记为OD(v)。有。有TD(v)=ID(v)OD(v)。可以证明,对于具有可以证明,对于具有n个顶点、个顶点、e条边的图,顶点条边的图,顶点vi的度的度TD(vi)与顶点的个数以及边的数目满足关系:与顶点的个数以及边的数目满足关系:2e =6第6页,本讲稿共71页 (7)边的权、网图。与边有关的数据信息称为权边的权、网图。与边有关的数据信息称为权(weight)。在实际应用中,权值可以有某种含义。比如,)。在实际应用中,权值可以有某种含义。比如,在一个反映城市交通线路的图中,边上的权值可以表示该在一个反映城市交通线路的图中,边上的权值可以表示该条线路的长度或者等级;对于一个电子线路图,边上
7、的权条线路的长度或者等级;对于一个电子线路图,边上的权值可以表示两个端点之间的电阻、电流或电压值;对于反值可以表示两个端点之间的电阻、电流或电压值;对于反映工程进度的图而言,边上的权值可以表示从前一个工程映工程进度的图而言,边上的权值可以表示从前一个工程到后一个工程所需要的时间等等。边上带权的图称为网图到后一个工程所需要的时间等等。边上带权的图称为网图或网络(或网络(network)。如果边是有方向的带权图,则就是)。如果边是有方向的带权图,则就是一个有向网图。一个有向网图。(8)路径、路径长度。路径、路径长度。顶点顶点vp到顶点到顶点vq之间的路径之间的路径(path)是指顶点序列)是指顶点
8、序列vp,vi1,vi2,vim,vq。其中,(。其中,(vp,vi1),),(vi1,vi2),,(vim,vq)分别为图中的边。路径上边的数目分别为图中的边。路径上边的数目称为路径长度。称为路径长度。7第7页,本讲稿共71页 (9)回路、简单路径、简单回路。回路、简单路径、简单回路。路径中第一个顶点路径中第一个顶点与最后一个顶点相同的路径称为回路或者环(与最后一个顶点相同的路径称为回路或者环(cycle)。)。序列中顶点不重复出现的路径称为简单路径。除第一个序列中顶点不重复出现的路径称为简单路径。除第一个顶点与最后一个顶点之外,其他顶点不重复出现的回路顶点与最后一个顶点之外,其他顶点不重复
9、出现的回路称为简单回路,或者简单环。称为简单回路,或者简单环。(10)子图。对于图子图。对于图G=(V,E),),G=(V,E),若),若存在存在V是是V的子集的子集,E是是E的子集的子集,则称图,则称图G是是G的一的一个子图。下图示出了个子图。下图示出了G2和和G1的两个子图的两个子图G和和G。8第8页,本讲稿共71页(11)连连通通的的、连连通通图图、连连通通分分量量。在在无无向向图图中中,如如果果从从一一个个顶顶点点vi到到另另一一个个顶顶点点vj(ij)有有路路径径,则则称称顶顶点点vi和和vj是是连连通通的的。如如果果图图中中任任意意两两顶顶点点都都是是连连通通的的,则则称称该该图图
10、是是连连通通图图。无无向向图图的的极极大大连连通通子子图图称称为为连连通通分分量量。下下图图(a)中中有有两个连通分量,如图两个连通分量,如图(b)所示。所示。9第9页,本讲稿共71页 (12)强强连连通通图图、强强连连通通分分量量。对对于于有有向向图图来来说说,若若图图中中任任意意一一对对顶顶点点vi 和和vj(ij)均均有有从从一一个个顶顶点点vi到到另另一一个个顶顶点点vj有有路路径径,也也有有从从vj到到vi的的路路径径,则则称称该该有有向向图图是是强强连连通通图图。有向图的极大强连通子图称为强连通分量。有向图的极大强连通子图称为强连通分量。左左下下图图中中有有两两个个强强连连通通分分
11、量量,分分别别是是v1,v3,v4和和v2,如右下图所示。如右下图所示。10第10页,本讲稿共71页 (13)生生成成树树。所所谓谓连连通通图图G的的生生成成树树,是是G的的包包含含其其全全部部n个个顶顶点点的的一一个个极极小小连连通通子子图图。它它必必定定包包含含且且仅仅包包含含G的的n-1条边。下图示出了图条边。下图示出了图G1 的一棵生成树。的一棵生成树。(14)生生成成森森林林。在在非非连连通通图图中中,由由每每个个连连通通分分量量都都可可得得到到一一个个极极小小连连通通子子图图,即即一一棵棵生生成成树树。这这些些连连通通分分量量的生成树就组成了一个非连通图的生成森林。的生成树就组成了
12、一个非连通图的生成森林。11第11页,本讲稿共71页7.1.2 7.1.2 图的基本操作图的基本操作CreatGraph(G)输入图)输入图G的顶点和边,建立图的顶点和边,建立图G的存储。的存储。DestroyGraph(G)释放图)释放图G占用的存储空间。占用的存储空间。GetVex(G,v)在图)在图G中找到顶点中找到顶点v,并返回顶点,并返回顶点v的相关信息。的相关信息。PutVex(G,v,value)在在图图G中中找找到到顶顶点点v,并并将将value值值赋赋给顶点给顶点v。InsertVex(G,v)在图)在图G中增添新顶点中增添新顶点v。DeleteVex(G,v)在在图图G中中
13、,删删除除顶顶点点v以以及及所所有有和和顶顶点点v相相关关联联的边或弧。的边或弧。InsertArc(G,v,w)在在图图G中中增增添添一一条条从从顶顶点点v到到顶顶点点w的的边或弧。边或弧。DeleteArc(G,v,w)在在图图G中中删删除除一一条条从从顶顶点点v到到顶顶点点w的的边边或弧。或弧。12第12页,本讲稿共71页DFSTraverse(G,v)在图在图G中,从顶点中,从顶点v出发深度优先遍出发深度优先遍历图历图G。BFSTraverse(G,v)在图在图G中,从顶点中,从顶点v出发广度优先遍出发广度优先遍历图历图G。LocateVex(G,u)在图在图G中找到顶点中找到顶点u,
14、返回该顶点在图,返回该顶点在图中位置。中位置。FirstAdjVex(G,v)在图在图G中,返回中,返回v的第一个邻接点。若的第一个邻接点。若顶点在顶点在G中没有邻接顶点,则返回中没有邻接顶点,则返回“空空”。NextAdjVex(G,v,w)在图在图G中,返回中,返回v的的(相对于相对于w的的)下下一个邻接顶点。若一个邻接顶点。若w是是v的最后一个邻接点,则返回的最后一个邻接点,则返回“空空”。13第13页,本讲稿共71页7.2 7.2 图的存储表示图的存储表示邻接矩阵邻接矩阵邻接表邻接表14第14页,本讲稿共71页7.2.1 邻接矩阵邻接矩阵 所所谓谓邻邻接接矩矩阵阵(Adjacency
15、Matrix)的的存存储储结结构构,就就是是用用一一维维数数组组存存储储图图中中顶顶点点的的信信息息,用用矩矩阵阵表表示示图图中中各各顶顶点点之之间间的的邻邻接接关关系系。假假设设图图G(V,E)有有n个个确确定定的的顶顶点点,即即Vv0,v1,vn-1,则则表表示示G中中各各顶顶点点相相邻邻关关系系为为一一个个n阶阶方方阵阵,矩矩阵阵的元素为:的元素为:Aij=若若G是网图,则邻接矩阵可定义为:是网图,则邻接矩阵可定义为:Aij=其其中中,wij表表示示边边(vi,vj)或或上上的的权权值值;表表示示一一个个计计算算机允许的、大于所有边上权值的数。机允许的、大于所有边上权值的数。1 若若(v
16、i,vj)或或是是E(G)中的边中的边0 若若(vi,vj)或或不是不是E(G)中的边中的边wij 若若(vi,vj)或或是是E(G)中的边中的边0或或 若若(vi,vj)或或不是不是E(G)中的边中的边15第15页,本讲稿共71页 用邻接矩阵表示法表示的无向图和网图如下图所示。16第16页,本讲稿共71页 从从图图的的邻邻接接矩矩阵阵存存储储方方法法容容易易看看出出这这种种表表示示具具有有以以下下特特点:点:无无向向图图的的邻邻接接矩矩阵阵一一定定是是一一个个对对称称矩矩阵阵。因因此此,在在具具体体存存放放邻邻接接矩矩阵阵时时只只需需存存放放上上(或或下下)三三角角矩矩阵阵的的元元素素即即可
17、。可。对对于于无无向向图图,邻邻接接矩矩阵阵的的第第i i行行(或或第第i i列列)非非零零元元素素(或非(或非元素)的个数正好是第元素)的个数正好是第i i个顶点的度个顶点的度TD(vi)TD(vi)。对对于于有有向向图图,邻邻接接矩矩阵阵的的第第i i行行(或或第第i i列列)非非零零元元素素(或或非非元元素素)的的个个数数正正好好是是第第i i个个顶顶点点的的出出度度OD(vi)OD(vi)(或或入度入度ID(vi)ID(vi))。)。用用邻邻接接矩矩阵阵方方法法存存储储图图,很很容容易易确确定定图图中中任任意意两两个个顶顶点点之之间间是是否否有有边边相相连连;但但是是,要要确确定定图图
18、中中有有多多少少条条边边,则则必必须须按按行行、按按列列对对每每个个元元素素进进行行检检测测,所所花花费费的的时时间间代代价价很大。这是用邻接矩阵存储图的局限性。很大。这是用邻接矩阵存储图的局限性。17第17页,本讲稿共71页 在在用用邻邻接接矩矩阵阵存存储储图图时时,除除了了用用一一个个二二维维数数组组存存储储用用于于表表示示顶顶点点间间相相邻邻关关系系的的邻邻接接矩矩阵阵外外,还还需需用用一一个个一一维维数数组组来来存存储储顶顶点点信信息息,另另外外还还有有图图的的顶顶点点数数和和边边数数。故故可可将将其其形式描述如下:形式描述如下:#define n 6/图的顶点数图的顶点数#defin
19、e e 8/图的边(弧)数图的边(弧)数typedef char vextype;/顶点的数据类型顶点的数据类型typedef float adjtype;/权值类型权值类型typedef structvextype vexsn;/顶点表顶点表adjtype arcsnn;/邻接矩阵,即边表邻接矩阵,即边表int n,e;graph;/graph是以邻接矩阵存储的图类型是以邻接矩阵存储的图类型18第18页,本讲稿共71页 建立一个图的邻接矩阵存储的算法如下:建立一个图的邻接矩阵存储的算法如下:算法算法7.1 无向网络的建立无向网络的建立CREATGRAPH(graph*ga)int i,j,k
20、;float w;for(i=0;ivexsi=getchar();/建立顶点表建立顶点表for(i=0;in;i+)for(j=0;jarcsij=0;/邻接矩阵初始化邻接矩阵初始化for(k=0;karcsij=w;ga-arcsji=w;19第19页,本讲稿共71页7.2.2 邻接表邻接表 邻接表邻接表(Adjacency List)是图的一种顺序存储与链式存储结是图的一种顺序存储与链式存储结合的存储方法。邻接表表示法类似于树的孩子链表表示法。合的存储方法。邻接表表示法类似于树的孩子链表表示法。就是对于图就是对于图G中的每个顶点中的每个顶点vi,将所有邻接于,将所有邻接于vi的顶点的顶点
21、vj链成链成一个单链表,这个单链表就称为顶点一个单链表,这个单链表就称为顶点vi的邻接表,再将所有的邻接表,再将所有点的邻接表表头放到数组中,就构成了图的邻接表。点的邻接表表头放到数组中,就构成了图的邻接表。20第20页,本讲稿共71页 在邻接表表示中有两种结点结构,如下图所示。在邻接表表示中有两种结点结构,如下图所示。一一种种是是顶顶点点表表的的结结点点结结构构,它它由由顶顶点点域域(vertex)和和指指向向第第一一条条邻邻接接边边的的指指针针域域(firstedge)构构成成,另另一一种种是是边边表表(即即邻邻接接表表)结结点点,它它由由邻邻接接点点域域(adjvex)和和指指向向下下一
22、一条条邻邻接接边边的的指指针针域域(next)构构成成。对对于于网网图图的的边边表表需需再再增增设设一一个个存存储储边边上上信信息息(如如权权值值等等)的的域域(info),网网图图的的边边表表结结构构如如下图所示。下图所示。21第21页,本讲稿共71页 下图给出无向图及对应的邻接表表示。下图给出无向图及对应的邻接表表示。22第22页,本讲稿共71页邻接表表示的形式描述如下:邻接表表示的形式描述如下:typedef struct nodeint adjvex;/*邻接点域邻接点域*/struct node*next;/*指向下一个邻接点的指针域指向下一个邻接点的指针域*/*若要表示边上信息,则
23、应增加一个数据域若要表示边上信息,则应增加一个数据域info*/EdgeNode;/*边表结点边表结点*/typedef struct vnodeVertexType vertex;/*顶点域顶点域*/EdgeNode*firstedge;/*边表头指针边表头指针*/VerNode;/*顶点表结点顶点表结点*/VerNode gan;23第23页,本讲稿共71页算法算法7.2 无向图邻接表的建立无向图邻接表的建立CREATADJLIST(VexNode ga)/*建立无向图的邻接表建立无向图的邻接表*/int i,j,k;EdgeNode*s;for(i=0;in;i+)/*读入顶点信息读入顶
24、点信息*/gai.vertex=getchar();gai.firstedge=NULL;/*边表头指针初始化边表头指针初始化*/for(k=0;kadjvex=j;s-next=gai.firstedge;gai.firstedge=s;/*将将*s插入顶点插入顶点vi的边表头部的边表头部*/24第24页,本讲稿共71页 若若无无向向图图中中有有n个个顶顶点点、e条条边边,则则它它的的邻邻接接表表需需n个个头头结结点点和和2e个个表表结结点点。显显然然,在在边边稀稀疏疏(en(n-1)/2)的的情情况况下下,用用邻邻接接表表表表示示图图比比邻邻接接矩矩阵阵节节省省存存储储空空间间,当当和和边
25、边相相关的信息较多时更是如此。关的信息较多时更是如此。在在无无向向图图的的邻邻接接表表中中,顶顶点点vi的的度度恰恰为为第第i个个链链表表中中的的结结点点数数;而而在在有有向向图图中中,第第i个个链链表表中中的的结结点点个个数数只只是是顶顶点点vi的的出出度度,为为求求入入度度,必必须须遍遍历历整整个个邻邻接接表表。在在所所有有链链表表中中其其邻邻接接点点域域的的值值为为i的的结结点点的的个个数数是是顶顶点点vi的的入入度度。有有时时,为为了了便便于于确确定定顶顶点点的的入入度度或或以以顶顶点点vi为为头头的的弧弧,可可以以建建立立一一个个有有向向图图的的逆逆邻邻接接表表,即即对对每每个个顶顶
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第七章 图精选PPT 第七 精选 PPT
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内