您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数据结构(严蔚敏)课件第7章
2020年1月19日星期日第1页第七章图2020年1月19日星期日第2页【课前思考】1.同学们有没有发现现在的十字路口的交通灯已从过去的一对改为三对,即每个方向的直行、左拐和右拐能否通行都有相应的交通灯指明。你能否对某个丁字路口的6条通路画出和第一章绪论中介绍的五叉路口交通管理示意图相类似的图?同学们一定可以画出如下所示类似的图形。2.如果每次让三条路同时通行,那么从图看出哪些路可以同时通行?同时可通行的路为:(AB,BC,CA),(AB,BC,BA),(AB,AC,CA),(CB,CA,BC)2020年1月19日星期日第3页【学习目标】1.领会图的类型定义。2.熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则。3.熟练掌握图的两种遍历算法。4.理解各种图的应用问题的算法。2020年1月19日星期日第4页【重点和难点】图的应用极为广泛,而且图的各种应用问题的算法都比较经典,因此本章重点在于理解各种图的算法及其应用场合。【知识点】图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、拓扑排序、关键路径。2020年1月19日星期日第5页【学习指南】离散数学中的图论是专门研究图性质的一个数学分支,但图论注重研究图的纯数学性质,而数据结构中对图的讨论则侧重于在计算机中如何表示图以及如何实现图的操作和应用等。图是较线性表和树更为复杂的数据结构,因此和线性表、树不同,虽然在遍历图的同时可以对顶点或弧进行各种操作,但更多图的应用问题如求最小生成树和最短路径等在图论的研究中都早已有了特定算法,在本章中主要是介绍它们在计算机中的具体实现。这些算法乍一看都比较难,应多对照具体图例的存储结构进行学习。而图遍历的两种搜索路径和树遍历的两种搜索路径极为相似,应将两者的算法对照学习以便提高学习的效果。本章必须完成的算法设计题为:7.7,7.9,7.10,7.12,7.14,7.15,7.222020年1月19日星期日第6页7.1图的定义与术语7.2图的存储表示7.3图的遍历7.4最小生成树7.5重(双)连通图和关节点7.6两点之间的最短路径问题7.7拓扑排序7.8关键路径2020年1月19日星期日第7页图是由一个顶点集V和一个弧集R构成的数据结构。Graph=(V,VR)其中,VR={v,w|v,w∈V且P(v,w)}v,w表示从v到w的一条弧,并称v为弧头,w为弧尾。谓词P(v,w)定义了弧v,w的意义或信息。图的结构定义:7.1图的定义与术语2020年1月19日星期日第8页由于“弧”是有方向的,因此称由顶点集和弧集构成的图为有向图。ABECD例如:G1=(V1,VR1)其中V1={A,B,C,D,E}VR1={A,B,A,E,B,C,C,D,D,B,D,A,E,C}2020年1月19日星期日第9页若v,wVR必有w,vVR,则称(v,w)为顶点v和顶点w之间存在一条边。BCADFE由顶点集和边集构成的图称作无向图。例如:G2=(V2,VR2)V2={A,B,C,D,E,F}VR2={(A,B),(A,E),(B,E),(C,D),(D,F),(B,F),(C,F)}2020年1月19日星期日第10页名词和术语网、子图完全图、稀疏图、稠密图邻接点、度、入度、出度路径、路径长度、简单路径、简单回路连通图、连通分量、强连通图、强连通分量生成树、生成森林2020年1月19日星期日第11页ABECFAEFBBC设图G=(V,{VR})和图G=(V,{VR}),且VV,VRVR,则称G为G的子图。1597211132弧或边带权的图分别称作有向网或无向网。C2020年1月19日星期日第12页假设图中有n个顶点,e条边,则含有e=n(n-1)/2条边的无向图称作完全图;含有e=n(n-1)条弧的有向图称作有向完全图;若边或弧的个数enlogn,则称作稀疏图,否则称作稠密图。2020年1月19日星期日第13页假若顶点v和顶点w之间存在一条边,则称顶点v和w互为邻接点,ACDFE例如:ID(B)=3ID(A)=2边(v,w)和顶点v和w相关联。和顶点v关联的边的数目定义为顶点v的度。B2020年1月19日星期日第14页顶点的出度:以顶点v为弧尾的弧的数目;ABECF对有向图来说,顶点的入度:以顶点v为弧头的弧的数目。顶点的度(TD)=出度(OD)+入度(ID)例如:ID(B)=2OD(B)=1TD(B)=32020年1月19日星期日第15页设图G=(V,{VR})中的一个顶点序列{u=vi,0,vi,1,…,vi,m=w}中,(vi,j-1,vi,j)VR1≤j≤m,则称从顶点u到顶点w之间存在一条路径。路径上边(或弧)的数目称作路径长度。ABECF如:长度为3的路径{A,B,C,F}简单路径:序列中顶点不重复出现的路径。简单回路:序列中第一个顶点和最后一个顶点相同的路径而其余顶点不重复。2020年1月19日星期日第16页若图G中任意两个顶点之间都有路径相通,则称此图为连通图;若无向图为非连通图,则图中各个极大连通子图称作此图的连通分量。BACDFEBACDFE2020年1月19日星期日第17页若任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图。ABECFABECF对有向图,否则,其各个强连通子图称作它的强连通分量。2020年1月19日星期日第18页假设一个连通图有n个顶点和e条边,其中n-1条边和n个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树。对非连通图,则称由各个连通分量的生成树的集合为此非连通图的生成森林。BACDFE2020年1月19日星期日第19页结构的建立和销毁插入或删除顶点对邻接点的操作对顶点的访问操作遍历插入和删除弧基本操作2020年1月19日星期日第20页CreatGraph(&G,V,VR)://按定义(V,VR)构造图DestroyGraph(&G)://销毁图结构的建立和销毁2020年1月19日星期日第21页对顶点的访问操作LocateVex(G,u);//若G中存在顶点u,则返回该顶点在//图中“位置”;否则返回其它信息。GetVex(G,v);//返回v的值。PutVex(&G,v,value);//对v赋值value。2020年1月19日星期日第22页对邻接点的操作FirstAdjVex(G,v);//返回v的“第一个邻接点”。若该顶点//在G中没有邻接点,则返回“空”。NextAdjVex(G,v,w);//返回v的(相对于w的)“下一个邻接//点”。若w是v的最后一个邻接点,则//返回“空”。2020年1月19日星期日第23页插入或删除顶点InsertVex(&G,v);//在图G中增添新顶点v。DeleteVex(&G,v);//删除G中顶点v及其相关的弧。2020年1月19日星期日第24页插入和删除弧InsertArc(&G,v,w);//在G中增添弧v,w,若G是无向的,//则还增添对称弧w,v。DeleteArc(&G,v,w);//在G中删除弧v,w,若G是无向的,//则还删除对称弧w,v。2020年1月19日星期日第25页遍历DFSTraverse(G,v,Visit());//从顶点v起深度优先遍历图G,并对每//个顶点调用函数Visit一次且仅一次。BFSTraverse(G,v,Visit());//从顶点v起广度优先遍历图G,并对每//个顶点调用函数Visit一次且仅一次。2020年1月19日星期日第26页7.2图的存储表示一、图的数组(邻接矩阵)存储表示二、图的邻接表存储表示三、有向图的十字链表存储表示四、无向图的邻接多重表存储表示2020年1月19日星期日第27页Aij={0(i,j)VR1(i,j)VR一、图的数组(邻接矩阵)存储表示BACDFE定义:矩阵的元素为0100101000100001010010011100000111002020年1月19日星期日第28页有向图的邻接矩阵为非对称矩阵ABECF01001001000001011000001002020年1月19日星期日第29页typedefstructArcCell{//弧的定义VRTypeadj;//VRType是顶点关系类型。//对无权图,用1或0表示相邻否;//对带权图,则为权值类型。InfoType*info;//该弧相关信息的指针}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];2020年1月19日星期日第30页typedefstruct{//图的定义VertexType//顶点信息vexs[MAX_VERTEX_NUM];AdjMatrixarcs;//弧的信息intvexnum,arcnum;//顶点数,弧数GraphKindkind;//图的种类标志}MGraph;2020年1月19日星期日第31页0A141B0452C353D254E015F123BACDFE二、图的邻接表存储表示2020年1月19日星期日第32页142301201234ABCDE有向图的邻接表ABECD可见,在有向图的邻接表中不易找到指向该顶点的弧。2020年1月19日星期日第33页ABECD有向图的逆邻接表ABCDE30342001234在有向图的邻接表中,对每个顶点,链接的是指向该顶点的弧。2020年1月19日星期日第34页typedefstructArcNode{intadjvex;//该弧所指向的顶点的位置structArcNode*nextarc;//指向下一条弧的指针InfoType*info;//该弧相关信息的指针}ArcNode;adjvexnextarcinfo弧的结点结构2020年1月19日星期日第35页typedefstructVNode{VertexTypedata;//顶点信息ArcNode*firstarc;//指向第一条依附该顶点的弧}VNode,AdjList[MAX_VERTEX_NUM];datafirstarc顶点的结点结构2020年1月19日星期日第36页typedefstruct{AdjListvertices;intvexnum,arcnum;intkind;//图的种类标志}ALGraph;图的结构定义2020年1月19日星期日第37页三、有向图的十字链表存储表示弧的结点结构弧尾顶点位置弧头顶点位置弧的相关信息指向下一个有相同弧尾的结点指向下一个有相同弧头的结点typedefstructArcBox{//弧的结构表示inttailvex,headvex;InfoType*info;structArcBox*hlink,*tlink;}VexNode;2020年1月19日星期日第38页顶点的结点结构顶点信息数据指向该顶点的第一条入弧指向该顶点的第一条出弧typedefstructVexNode{//顶点的结构表示VertexTypedata;ArcBox*firstin,*firstout;}VexNode;2020年1月19日星期日第39页typedefstruct{VexNodexlist[MAX_VERTEX_NUM];//顶点结点(表头向量)intvexnum,arcnum;//有向图的当前顶点数和弧数}OLGraph;有向图的结构表示(十字链表)2020年1月19日星期日第40页四、无向图的邻接多重表存储表示typedefstructEbox{VisitIfmark;//访问标记intivex,jvex;//该边依附的两个顶点的位置structEBox*ilink,*jlink;//分别指向依附这两个顶点的下一条边InfoType*info;//该边信息指针}EBox;边的结构表示2020年1月19日星期日第41页typedefstruct{//邻接多重表VexBoxadjmulist[MAX_VERTEX_NUM];intvexnum,
本文标题:数据结构(严蔚敏)课件第7章
链接地址:https://www.777doc.com/doc-3171950 .html