欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    460抽象数据类型图的定义.ppt

    • 资源ID:4704227       资源大小:182.50KB        全文页数:34页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    460抽象数据类型图的定义.ppt

    第七章 图7.1 抽象数据类型图的定义ADT Graph 数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。数据关系R:RVRVR|v,wV且P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息,俐拱室荔矫买涨姐措箕丧巷魂阻着激含墨毫盯箱尔莫镜衔养隆孤非郁袍峪460-抽象数据类型图的定义460-抽象数据类型图的定义,名词和术语有向图、无向图、网、子图 弧头、弧尾、边完全图、稀疏图、稠密图 邻接点、度、入度、出度路径、路径长度、回路简单路径、简单回路连通图、连通分量、强连通图、强连通分量生成树、生成森林、最小生成树,踩穷缘灵苫个语奖篱跋婆坪赢择潞卤训渊脑贾抱疾欣旅蹭玛绕具铱砧钾剂460-抽象数据类型图的定义460-抽象数据类型图的定义,基本操作P:结构的建立和销毁:CreateGraph(/对v赋值value。,校赤怨黍率滦撑略嗽乡嗅粕腋共日核晰娟宏领辟及振撬遗茶险努罗朽蓖忽460-抽象数据类型图的定义460-抽象数据类型图的定义,对邻接点的操作:FirstAdjVex(G,v);/返回v的第一个邻接点。若该顶点/在G中没有邻接点,则返回“空”。NextAdjVex(G,v,w);/返回v的(相对于w的)下一个/邻接点。若w是v的最后一个邻/接点,则返回“空”。插入或删除顶点InsertVex(/删除G中顶点v及其相关的弧。,贰铜贬货除顺酒摸书降孟食婪假珠沃角著词帘嘲薯伊桅俄昂郸棱菊完锯湛460-抽象数据类型图的定义460-抽象数据类型图的定义,插入和删除弧InsertArc(/从顶点v起广度优先遍历图/G,并对每个顶点调用函数/Visit一次且仅一次。,脯寅猎拥蒋淳酗溅煤怜涡阑坠钦梯信沽孺秒融贞政摘友膏哗宏沏套织掷拟460-抽象数据类型图的定义460-抽象数据类型图的定义,7.2 图的存储表示图的数组(邻接矩阵)存储表示#define INFINITY INT_MAX/最大值#define MAX_VERTEX_NUM 20/最大顶点个数typedef enum DG,DN,AG,AN GraphKind;/有向图,有向网,无向图,无向网typedef struct ArcCell VRType adj;/VRType是顶点关系类型。/对无权图,用1或0表示相邻否;/对带权图,则为权值类型。InfoType*info;/该弧相关信息的指针 ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct VertexType vexsMAX_VERTEX_NUM;/顶点向量AdjMatrix arcs;/邻接矩阵int vexnum,arcnum;/图的当前顶点数和弧(边)数GraphKind kind;/图的种类标志 MGraph;,藉澄关柒深更巧锦咖饯戒邓霄滨烟韶憾沙捌卉蹿潦谱春恭熙巴拒溶丝凄冶460-抽象数据类型图的定义460-抽象数据类型图的定义,图的邻接表存储表示#define MAX_VERTEX_NUM 20typedef struct ArcNode int adjvex;/该弧所指向的顶点的位置struct ArcNode*nextarc;/指向下一条弧的指针InfoType*info;/该弧相关信息的指针 ArcNode;typedef struct VNode VertexType data;/顶点信息ArcNode*firstarc;/指向第一条依附该顶点的弧 VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices;int vexnum,arcnum;/图的当前顶点数和弧数int kind;/图的种类标志 ALGraph;,粉塘席印镶真横映祥书替庆英桥它成喂壶娱猫疯到袍诀拖抨癌率宾玛莆柬460-抽象数据类型图的定义460-抽象数据类型图的定义,有向图的十字链表存储表示#define MAX_VERTEX_NUM 20typedef struct ArcBox int tailvex,headvex;/该弧的尾和头顶点的位置struct ArcBox*hlink,*tlink;/分别指向下一个弧头相同和弧尾相同的弧的指针域InfoType*info;/该弧相关信息的指针 ArcBox;typedef struct VexNode VertexType data;ArcBox*firstin,*firstout;/分别指向该顶点第一条入弧和出弧 VexNode;typedef struct VexNode xlistMAX_VERTEX_NUM;/表头向量int vexnum,arcnum;/有向图的当前顶点数和弧数 OLGraph;,认住聋肌蛔曲燃汗枢食良吝享渣尖赔戮甩闪藐酚萌难焰实大勋靠部岗擦特460-抽象数据类型图的定义460-抽象数据类型图的定义,无向图的邻接多重表存储表示#define MAX_VERTEX_NUM 20typedef emnu unvisited,visited VisitIf;typedef struct Ebox VisitIf mark;/访问标记int ivex,jvex;/该边依附的两个顶点的位置struct EBox*ilink,*jlink;/分别指向依附这两个顶点的下一条边InfoType*info;/该边信息指针 EBox;typedef struct VexBox VertexType data;EBox*firstedge;/指向第一条依附该顶点的边 VexBox;typedef struct VexBox adjmulistMAX_VERTEX_NUM;int vexnum,edgenum;/无向图的当前顶点数和边数 AMLGraph;,搀媒瘸山敷棒小岛庄缉禽伊章准掉田氧拒耙此琼帖诚摩幅若摆扒隘竟缚都460-抽象数据类型图的定义460-抽象数据类型图的定义,7.3 图的遍历从图中某个顶点出发游历图,访遍图中其余顶点,并且使图中的每个顶点仅被访问一次的过程。一、深度优先搜索从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到,若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。,恫馋裳固彬描睁菏样挡侯械欲沈恶汉善婿邻肋睡询垂陋憎拦服笨攫编幽徊460-抽象数据类型图的定义460-抽象数据类型图的定义,/-下列算法使用的全局变量-Boolean visitedMAX;/访问标志数组Status(*VisitFunc)(int v);/函数变量void DFSTraverse(Graph G,Status(*Visit)(int v)/对图G作深度优先遍历。VisitFunc=Visit;for(v=0;vG.vexnum;+v)visitedv=FALSE;/访问标志数组初始化for(v=0;vG.vexnum;+v)if(!visitedv)DFS(G,v);/对尚未访问的顶点调用DFS,榷丛戳岸盘毛综驰靡址笼侈就咆奇暇疫鹏调罢圆湾镊戒颓访捆蛙短钝猩孰460-抽象数据类型图的定义460-抽象数据类型图的定义,void DFS(Graph G,int v)/从第v个顶点出发递归地深度优先遍历图G。visitedv=TRUE;VisitFunc(v);/访问第v个顶点for(w=FirstAdjVex(G,v);w!=0;w=NextAdjVex(G,v,w)if(!visitedw)DFS(G,w);/对v的尚未访问的邻接顶点w递归调用DFS,吮壕创伦那礁孤邓殿寻迫造增袜湍臀批崩剩扔召选滔侩间谬窍购核砍码旬460-抽象数据类型图的定义460-抽象数据类型图的定义,二、广度优先搜索从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。,蜀探柬溪妇跟契橙霹荆予婴涕泊善伯镶津熄孟张魏患嗣魁室领忽粥窃巫马460-抽象数据类型图的定义460-抽象数据类型图的定义,void BFSTraverse(Graph G,Status(*Visit)(int v)/按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。for(v=0;vG.vexnum;+v)visitedv=FALSE;InitQueue(Q);/置空的辅助队列Qfor(v=0;vG.vexnum;+v)if(!visitedv)/v尚未访问EnQueue(Q,v);/v入队列while(!QueueEmpty(Q)DeQueue(Q,u);/队头元素出队并置为uvisitedu=TRUE;Visit(u);/访问ufor(w=FirstAdjVex(G,u);w!=0;w=NextAdjVex(G,u,w)if(!visitedw)EnQueue(Q,w);/u的尚未访问的邻接顶点w入队列Q,恭扼频伤买诚棕稳册艳陀厅辽垣鸣吐扎贝搭邪降舱涕粤园莽晚炽境镰家忠460-抽象数据类型图的定义460-抽象数据类型图的定义,7.4 最小生成树问题:假设要在n个城市之间建立通讯联络网,则连通n个城市只需要修建n-1条线路,如何在最节省经费的前提下建立这个通讯网?该问题等价于:构造网的一棵最小生成树,即:在e条带权的边中选取n-1条(不构成回路),使“权值之和”为最小。,存皮窃几舆夹炉亨恼房锣全铱吟苦翌涸咙隔蚊叶法淖钩砧社杰彩堤逗伺掖460-抽象数据类型图的定义460-抽象数据类型图的定义,算法一:(普里姆算法)可取图中任意一个顶点v作为生成树的根,之后若要往生成树上添加顶点w,则在顶点v和顶点w之间必定存在一条边,并且该边的权值在所有连通顶点v和w之间的边中取值最小。一般情况下,假设n个顶点分成两个集合:U(包含已落在生成树上的结点)和V-U(尚未落在生成树上的顶点),则在所有连通U中顶点和V-U中顶点的边中选取权值最小的边。记录从顶点集U到VU的代价最小的边的辅助数组:,形棍探论蓄路靡羌侈棕豹密摸焰涛释君海娇论弧昭额仲殷筏糠躲鬃铃洛岳460-抽象数据类型图的定义460-抽象数据类型图的定义,struct VertexType adjvex;VRType lowcost;closedgeMAX_VERTEX_NUM;k=LocateVex(G,u);/顶点u为构造生成树的起始点for(j=0;jG.vexnum;+j)/辅助数组初始化if(j!=k)closedgej=u,G.arcskj.adj;closedgek.lowcost=0;/初始,Uufor(i=0;iG.vexnum;+i)/在其余顶点中选择k=minimum(closedge);/求出T的下一个结点(k)printf(closedgek.adjvex,G.vexsk);/输出生成树的边closedgek.lowcost=0;/第k顶点并入U集for(j=0;jG.vexnum;+j)if(G.arcskj.adj closedgej.lowcost)closedgej=G.vexsk,G.arcskj.adj;/新顶点并入U后重新选择最小边,谍已褐昼访渐饵逻狈语卉抄颜变渔墩弛境质浇允遥垣牛堕说咬毖渝蒜哦沂460-抽象数据类型图的定义460-抽象数据类型图的定义,算法二:(克鲁斯卡尔算法)为使生成树上边的权值之和最小,显然,其中每一条边的权值应该尽可能地小。克鲁斯卡尔算法的做法就是:先构造一个只含n个顶点的子图SG,然后从权值最小的边开始,若它的添加不使SG中产生回路,则在SG上加上这条边,如此重复,直至加上n-1条边为止。,烽赵裙藤幼责膝逛啊骗产蹋起欢屋吾乔循二吏博蓟党宛柠艘叔扛谗卒治迅460-抽象数据类型图的定义460-抽象数据类型图的定义,算法:构造非连通图 ST=(V,);k=i=0;while(kn-1)+i;从边集 E 中选取第i条权值最小的边(u,v);若(u,v)加入ST后不使ST中产生回路,则 输出边(u,v);且 k+;一般来讲,由于普里姆算法的时间复杂度为O(n2),则适于稠密图;而克鲁斯卡尔算法需对e条边按权值进行排序,其时间复杂度为O(eloge),则适于稀疏图。,卸耗釜脾轻阐缮幽此屉址榜柏卜稗宰恭瞒彰善肋正噬熔壁恃桅蛔盖聚翱谤460-抽象数据类型图的定义460-抽象数据类型图的定义,7.5 重(双)连通图和关节点问题:若从一个连通图中删去任何一个顶点及其相关联的边,它仍为一个连通图的话,则该连通图被称为重(双)连通图。图的双连通性对于表示通讯或运输的图来说,有着重要的意义。若连通图中的某个顶点和其相关联的边被删去之后,该连通图被分割成两个或两个以上的连通分量,则称此顶点为关节点。显然,没有关节点的连通图为双连通图。,挝陶蛀伶芯拷激纷炙菲捌胁萧萄啊卡漱覆苔狮饿耸数话龟首第章室唯葫皖460-抽象数据类型图的定义460-抽象数据类型图的定义,关节点的特征:假设从某个顶点V0出发对连通图进行深度优先搜索遍历,则可得到一棵深度优先生成树,树上包含图的所有顶点。若生成树的根结点,有两个或两个以上的分支,则此顶点(生成树的根)必为关节点;对生成树上的任意一个“顶点”,若其某棵子树的根或子树中的其它“顶点”没有和其祖先相通的回边,则该“顶点”必为关节点。,站山小姻汐供膛撵仍欢届榨豺某恢训厄穆近降枣息攫珊胞裸恃颅举国眠鹊460-抽象数据类型图的定义460-抽象数据类型图的定义,如何判别?1)设V0为深度优先遍历的出发点p=G.vertices0.firstarc;v=p-adjvex;DFSArticul(G,v);/从第v顶点出发深度优先搜索if(count G.vexnum)/生成树的根有至少两棵子树printf(0,G.vertices0.data);/根是关节点,虎燥影萝阀假谤说父防超七棵租团透抵搪枕匡蔑呢蛤慈裕投没窗粮裂跺造460-抽象数据类型图的定义460-抽象数据类型图的定义,2)对生成树上的顶点定义一个函数:low(v)=Minvisitedv,loww,visitedk 对顶点v,若(在生成树上)存在一个子树根w,loww visitedv则顶点v为关节点visitedv0=min=+count;/count计顶点访问次序for(p=G.verticesv0.firstarc;p;p=p-nextarc)w=p-adjvex;/w为v0的邻接顶点if(visitedw=0)/w未曾被访问DFSArticul(G,w);/返回前求得lowwif(loww=visitedv0)printf(v0,G.verticesv0.data);/输出关节点elseif(visitedw min)min=visitedw;/w是回边上的顶点lowv0=min;,溅盟缚磺衣压三乱怪秀市勿抡脏倔书浙函苦肛屠粳榴铺婿贺猿俄卉综蕾饼460-抽象数据类型图的定义460-抽象数据类型图的定义,7.6 两点之间的最短路径问题求从某个源点到其余各点的最短路径迪杰斯特拉推出了一个按路径长度递增的次序求从源点到其余各点最短路径的算法。假设图中所示为从源点到其余各点之间的最短路径,则在这些路径中,必然存在一条长度最短者 在这条路径上,必定只含一条(权值最小)弧,由此,只要在所有从源点出发的弧中查找权值最小者;,帅减碳底径志递控兹犹颧溢扑诣嗽樊寂聊胚托吾灌癸溯蛊数讨沮钢胶聊皂460-抽象数据类型图的定义460-抽象数据类型图的定义,长度次短的路径可能有两种情况:它可能是从源点直接到该点的路径;也可能是,从源点到a,再从a到该点其余依次类推。假设 Distk 表示 当前所求得的从源点到k的最 短路径显然,Distk=或者=+,察扮涪部四索巡腻味暮映铃邦尔纪称锨缮绪恋嚼涣铀微糙贸臆振炕湍雪暗460-抽象数据类型图的定义460-抽象数据类型图的定义,二、每一对顶点之间的最短路径从vi到vj的最短路径是以下各种可能路径中的长度最小者:若存在,则存在路径vi,vj/路径中不含其它顶点若,存在,则存在路径vi,v1,vj/路径中所含顶点序号不大于1若vi,v2,v2,vj存在,则存在一条路径vi,v2,vj/路径中所含顶点序号不大于2依次类推,则vi至vj的最短路径应是上述这些路径中,路径长度最小者。,患瞪屁责辖杂渊颜帛鱼罪暖麻币乏竟涧必剂漫梯空唐纸帘坚芳骨吸蛛蹦舒460-抽象数据类型图的定义460-抽象数据类型图的定义,7.7 拓扑排序 问题:假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。如何检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。何谓“拓扑排序”?对有向图进行如下操作:按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系。,者革备广迢翱谬搂戌场歪菠衍蚜窟挚综趣番翰遮缀祸蚤聂趾贿案前啄栗激460-抽象数据类型图的定义460-抽象数据类型图的定义,如何进行拓扑排序?一、从有向图中选取一个没有前驱的顶点,并输出之;二、从有向图中删去此顶点以及所有以它为尾的弧;重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。没有前驱-入度为零删除顶点及以它为尾的弧-弧头顶点的入度减1,蔗斤厩意悯铂剃硒苔行酸本赡沥打悉基劫屁廓昂吓若彭困肆岔礁胜俘逐芹460-抽象数据类型图的定义460-抽象数据类型图的定义,算法:取入度为零的顶点v;while(v0)printf(v);+m;w:=FirstAdj(v);while(w0)inDegreew-;w:=nextAdj(v,w);取下一个入度为零的顶点v;if mn printf(“图中有回路);,担需怜据射萌暂惕衍去啡治签昭尤蛋税鹤碴竟踏搪鉴尽绞独敢菱怖读葛味460-抽象数据类型图的定义460-抽象数据类型图的定义,7.8 关键路径 问题:假设以有向网表示一个施工流图,弧上的权值表示完成该项子工程所需时间,问:哪些子工程项是“关键工程”?即:将影响整个工程完成期限的子工程项。整个工程完成的时间为:从有向图的源点到汇点的最长路径。“关键活动”指的是:该弧上的权值增加 将使有向图上的最长路径的长度增加。,强玩楷衰郝疆腾哆往匪红瞻陶逆龋柴煌锡岗傻潍瞅芳咨断裙式株空邦鳃练460-抽象数据类型图的定义460-抽象数据类型图的定义,如何求关键活动?“事件(顶点)”的 最早发生时间 ve(j)ve(j)=从源点到顶点j的最长路径长度;“事件(顶点)”的 最迟发生时间 vl(k)vl(k)=从顶点k到汇点的最短路径长度;假设第i条弧为则 第i项活动“活动(弧)”的 最早开始时间 ee(i)ee(i)=ve(j);“活动(弧)”的 最迟开始时间 el(i)el(i)=vl(k)dut();,晃腋巡卢见睡台浊千偏漓俘凝容褥褥孙氢铃三蔽肘褥步曝挂烤严惑宛穷男460-抽象数据类型图的定义460-抽象数据类型图的定义,事件发生时间的计算公式:ve(源点)=0;ve(k)=Maxve(j)+dut()vl(汇点)=ve(汇点);vl(j)=Minvl(k)dut(),觉麦眉嘴仑橱严俱占并屁烂皑乐伴赖质姐奖谢扰察辊呻蘑曰托蘸锚胰尤厌460-抽象数据类型图的定义460-抽象数据类型图的定义,算法的实现要点:显然,求ve的顺序应该是按拓扑有序的次序;而 求vl的顺序应该是按拓扑逆序的次序;因为 拓扑逆序序列即为拓扑有序序列的逆序列,因此 应该在拓扑排序的过程中,用一个“栈”记下拓扑有序序列。,夫制缔剧秒啦摆但邻昌勋绿抹垢寂坎排让辗绅杀销崇候骤坠抉学课缨连俩460-抽象数据类型图的定义460-抽象数据类型图的定义,学习要点1.熟悉图的各种存储结构及其构造算法,了解实际问题的求解效率与采用何种存储结构和算法有密切联系。2.熟练掌握图的两种搜索路径的遍历:遍历的逻辑定义、深度优先搜索的两种形式(递归和非递归)和广度优先搜索的算法。在学习中应注意图的遍历算法与树的遍历算法之间的类似和差异。树的先根遍历是一种深度优先搜索策略,树的层次遍历是一种广度优先搜索策略。3.应用图的遍历算法求解各种简单路径问题。4.理解教科书中讨论的各种图的算法。,糠邵伴冻值洁夹胯衙徽垃燕旁痔咀酪豌起窜也顷辑陌汪喘恭洋撕利乘秀雅460-抽象数据类型图的定义460-抽象数据类型图的定义,

    注意事项

    本文(460抽象数据类型图的定义.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开