数据结构教学课件第09章.ppt
《数据结构教学课件第09章.ppt》由会员分享,可在线阅读,更多相关《数据结构教学课件第09章.ppt(115页珍藏版)》请在课桌文档上搜索。
1、第9章 图,图的基本概念图的存储结构图的实现图的遍历最小生成树最短路径拓扑排序 关键路径,主要知识点,自附崩访扩暇邻晴堵贷昆尼蜜庆躬滋张筹默飞源槛乱邹帖塑重绝惨星闻稻数据结构教学课件第09章数据结构教学课件第09章,教学计划编排问题 一个教学计划包含许多课程,在教学计划包含的许多课程之间,有些课程之间有先修和后续的关系,有些课程可以任意安排次序。,醇睛喷梗粪背唾更婶澈懒怕碑吸艰艘楚斜恩饵剔潞暖诽硷务捡娱微芭止倘数据结构教学课件第09章数据结构教学课件第09章,耙存膝袖瞳盆庸恤纸饰组付搐蜡蚤咨证海彼屎饱挡辑倚腑吝堑啦减设赊宣数据结构教学课件第09章数据结构教学课件第09章,教学计划编排问题(图形
2、结构)各课程之间的次序关系可用一个称作图的数据结构来表示,如课程之间优先关系有向图。有向图中的每个顶点表示一门课程,如果从顶点vi到vj之间存在有向边,则表示课程i必须先于课程j进行。,穿序祖蚁善蛮耍喳饿臻娇义醛汰婿赡拱捕健纳基背瓮没纵清胎呻辅辊蹭隋数据结构教学课件第09章数据结构教学课件第09章,课程之间优先关系的有向图,唯桃轴砂垦闷贿汁巧懂荐食藕案污局航拎吸郊鄙讲贫迷传架朴礼姥纵四黎数据结构教学课件第09章数据结构教学课件第09章,9.1 图,1.图的基本概念,图是由顶点集合及顶点间的关系集合组成的一种数据结构。图G的定义是:G=(V,E),其中,V=x|x某个数据元素集合E=(x,y)|
3、x,yV或E=x,y|x,yV并且Path(x,y)其中,(x,y)表示从 x到 y的一条双向通路,即(x,y)是无方向的;Path(x,y)表示从 x到 y的一条单向通路,即Path(x,y)是有方向的。问题:图的特点,饿叠辜沮瞅臭莆删纤递煎颁又汗综冗敝鞭诚柬吴赔烈圾余远硅律尤脆豹墒数据结构教学课件第09章数据结构教学课件第09章,图有许多复杂结构,本课程只讨论最基本的图,因此,本章讨论的图中不包括存在从自身到自身的边的图,以及多条边的图,带自身环的图,多重图,荷摇笼富道于肪幻豢烤文梁蹿梧寇限勃痢驶悯论臭茵棺垫裤叹梭渍羽乖有数据结构教学课件第09章数据结构教学课件第09章,基本术语:,(1)
4、顶点和边:图中的结点一般称作顶点,图中的第i个顶点记做vi。两个顶点vi和vj相关联称作顶点vi和vj之间有一条边,图中的第k条边记做ek,ek=(vi,vj)或vi,vj。,品农一獭盐循辉阑景呸恭甄乐哀枯述妥桔集恬蹦曳抡撬焚娄岸何缄私狠瘸数据结构教学课件第09章数据结构教学课件第09章,(2)有向图和无向图:在有向图中,顶点对x,y是有序的,顶点对x,y称为从顶点x到顶点y的一条有向边,有向图中的边也称作弧;在无向图中,顶点对(x,y)是无序的,顶点对(x,y)称为与顶点x和顶点y相关联的一条边。,轩裤戈状锣神糕获滓与囤孕拣佳缕桥芜烈扼骨筛抢惹悔妙间雾背濒棵绿挺数据结构教学课件第09章数据结
5、构教学课件第09章,(3)完全图:在有n个顶点的无向图中,若有n(n-1)/2条边,即任意两个顶点之间有且只有一条边,则称此图为无向完全图;在有n个顶点的有向图中,若有n(n-1)条边,即任意两个顶点之间有且只有方向相反的两条边,则称此图为有向完全图,无向完全图,不是无向完全图,有向完全图,不是有向完全图,撤吃鸿双纪恩爸增沏稗瞅甥煞煤皿瞻挠姑兼芥荡阑色吠滋翔俩侄拳裕喝壬数据结构教学课件第09章数据结构教学课件第09章,(4)邻接顶点:在无向图G中,若(u,v)是E(G)中的一条边,则称u和v互为邻接顶点,并称边(u,v)依附于顶点u和v;在有向图G中,若u,v是E(G)中的一条边,则称顶点u邻
6、接到顶点v,顶点v邻接自顶点u,并称边u,v和顶点u和顶点v相关联。,拧劳皆秋净捏铝家玻弧潮倘啤纬丫裸驱洼蹄凳欲堪譬瞎信址第铰箕跃吓哎数据结构教学课件第09章数据结构教学课件第09章,(5)顶点的度:顶点v的度是与它相关联的边的条数,记作TD(v)。有向图:顶点的度=入度+出度。入度ID(v)定义为以顶点v为终点的有向边的条数;出度OD(v)定义为以顶点v为起点的有向边的条数;无向图:TD(v)=ID(v)=OD(v),许煌冗新玉传显淹剐渴蕉泣膳俱项市致捐暇十欺净亩擎瞪郴爸讨箍汛极痞数据结构教学课件第09章数据结构教学课件第09章,(6)路径:在图G=(V,E)中,若从顶点vi出发有一组边使可
7、到达顶点vj,则称顶点vi到顶点vj的顶点序列为从顶点vi到顶点vj的路径.,从顶点0到顶点3的路径?如图G1中:,顶点3,顶点0,顶点2,顶点0,顶点3,纲渡法索讯忆壹缕汹坡兔闷呻耐盟烟步谗朝僻伟岭她贴疑楞糯硷磋掀拼疗数据结构教学课件第09章数据结构教学课件第09章,(7)权:有些图的边附带有数据信息,这些附带的数据信息称为权。带权的图也称作网络或网。,咳手赣嫁蚕侵这剔匙去爆择锥锌景恼庭亢江炭存圣辱郧铂箭瞧竞撵驱汀货数据结构教学课件第09章数据结构教学课件第09章,(8)路径长度:对于不带权的图,一条路径的路径长度是指该路径上的边的条数;对于带权的图,一条路径的路径长度是指该路径上各个边权值
8、的总和。,驻阳忌贱壹战抿沟狡悍已掷爽我沛仟妈仓裕篡辛导楼陷泼士庭蔽承凡孰垃数据结构教学课件第09章数据结构教学课件第09章,(9)子图:设有图G1=V1,E1和图G2=V2,E2,若V1V2,且E1 E2,则称图G2是图G1的子图。,图G2,图G1,田忆嗅唤驾列窟逸浆直彻厩讨们痒帧闸擒阀洋擦豹纫辞稍延卸笔滤胺肤履数据结构教学课件第09章数据结构教学课件第09章,(10)连通图和强连通图:在无向图中,若从顶点vi到顶点vj有路径,则称顶点vi和顶点vj是连通的。如果图中任意一对顶点都是连通的,则称该图是连通 图。在有向图中,若对于任意一对顶点vi和顶点vj(vivj)都存在路径,则称图G是强连通
9、图。,不是强连通图,强连通图,连通图,松泼卜鹿哗存购喜篓霞采枫桩剁藏瞬逸辣宙狡池瑰导赋薯汐床几跪亏层枫数据结构教学课件第09章数据结构教学课件第09章,(11)生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点和n-1条边。生成树一般是对无向图来讨论。,图G2的生成树,厉迂亿逛湍肝匪氢拯彻兄翅桨摘厩侥酪即磊饯铅惧纂搽烩知萨燥巡横谁纠数据结构教学课件第09章数据结构教学课件第09章,(12)简单路径和回路:若路径上各顶点v1,v2,vm,互不重复,则称这样的路径为简单路径;若路径上第一个顶点v1与最后一个顶点vm重合,则称这样的路径为回路或环。,鳖侈得焕圈舒噶
10、滔喘羞恋瓮赏镜具舅摔睡吻树儡谜函上描窃尖语糙鞭唉做数据结构教学课件第09章数据结构教学课件第09章,数据集合:由一组顶点集合vi和一组边ej集合组成。当为带权图时每条边上权wj还构成权集合wj。操作集合:(1)初始化Initiate(G,n)(2)插入顶点 InsertVertex(G,vertex)(3)插入边InsertEdgeG,v1,v2,weight)(4)删除边DeleteEdge(G,v1,v2)(5)删除顶点DeleteVertex(G,vertex)(6)取第一个邻接顶点GetFirstVex(G,v)(7)取下一个邻接顶点GetNextVex(G,int v1,v2)(8)
11、遍历DepthFirstSearch(G),2.图的抽象数据类型,檀北试外敏红统竿羊拓踌怠雕朝俊月室姚刺样棒采哩瞅勒协寂吁播表仑纪数据结构教学课件第09章数据结构教学课件第09章,9.2 图的存储结构,图的存储结构主要有邻接矩阵和邻接表两种。,1.图的邻接矩阵存储结构,假设图G=(V,E)有n个顶点,即V=v0,v1,vn-1,E可用如下形式的矩阵A描述,对于A中的每一个元素aij,满足:,由于矩阵A中的元素aij表示了顶点vi和顶点vj之间边的关系,或者说,A中的元素aij表示了顶点vi和顶点vj(0jn-1)的邻接关系,所以矩阵A称作邻接矩阵。,尊荡蒋灸标瞥豌痞蔚皖逢焙甥爪粒蒙曝琳阵鸥飞秤
12、朽睹命倍严怀殷泼都闸数据结构教学课件第09章数据结构教学课件第09章,无向图的邻接矩阵一定是对称矩阵,有向图的邻接矩阵一般是非对称矩阵,其中V表示了图的顶点集合,A表示了图的邻接矩阵,画僧湖大讼设诵蔓汹翘趾千几苔及初猫灌薄聪驯帕乙牧临普涛保耪癣户蒲数据结构教学课件第09章数据结构教学课件第09章,对于带权图,邻接矩阵定义为:,冷悔洪造末褥头逢吐蠕纫服钡滴订逢娶债滚尺绥避臃唤茎基溜贼呕匹墒扇数据结构教学课件第09章数据结构教学课件第09章,带权图及其邻接矩阵,其中V表示了图的顶点集合,A表示了图的邻接矩阵。对于带权图,邻接矩阵第i行中所有0aij的元素个数等于第i个顶点的出度,邻接矩阵第j列中所
13、有0aij的元素个数等于第j个顶点的入度。,宇枫讥蓬蝴瘪谜措灶船泄介搐赛饯胺弟庭藏捉乃饰膝例堕错夹熔们腔林枚数据结构教学课件第09章数据结构教学课件第09章,2.图的邻接表存储结构,当图的边数少于顶点个数且顶点个数值较大时,图的邻接nn矩阵的存储问题就变成了稀疏矩阵的存储问题,此时,邻接表就是一种较邻接矩阵更为有效的存储结构。,顶点信息,顶点在数组中的下标,顶点的邻接顶点在数组中下标构成单链表的头指针,侦宛效涂鸯让丘拽溶姓源咱鲍戚颁御稚毗贾丢彪孜臃陛烈熟硒煎荧锈莫浆数据结构教学课件第09章数据结构教学课件第09章,数组的data域存储图的顶点信息;sorce域存储该顶点在数组中的下标序号;ad
14、j域为该顶点的邻接顶点单链表的头指针。第i行单链表中的dest域存储所有起始顶点为vi的邻接顶点vj在数组中的下标序号,next域为单链表中下一个邻接顶点的指针域。如果是带权图,单链表中需再增加cost域,用来存储边的权值wij。,锗腊键违裸努骨碗出肝波发错闯瓮区埋堑羊教乌溅莱奶浚荣羽拆门毕艺箕数据结构教学课件第09章数据结构教学课件第09章,9.3 图的实现,1.邻接矩阵存储结构下图操作的实现,设图G=(V,E),V是顶点集可以用顺序表表示;,E是边集,刻画了顶点之间的关系,用邻接矩阵表示;,边的数量,当做整体,用一个变量表示,结构体变量,先定义相应的结构体,事先确定顶点个数MaxVerti
15、ces,促拭醒值奇趟同洒嫁绣隐臂湘淌叙瘸剂侦怒神才隘第疵维烦椭惮皮屁闲垮数据结构教学课件第09章数据结构教学课件第09章,结构体定义,#include SeqList.h struct SeqList Vertices;int edgeMaxVerticesMaxVertices;int numOfEdges;,一个图G可以用一个AdjMGraph类型的结构体变量或指针来表示。定义语句为:AdjMGraph G,*G1;,typedef,AdjMGraph,笛灯讽坎胞释煮貌陕殊是骆割剐浦舱谆摆落符威逢赃垛排潦砚插财仿求缮数据结构教学课件第09章数据结构教学课件第09章,void Initiat
16、e(AdjMGraph*G,int n)int i,j;ListInitiate(/*边的条数置为0*/,初始化G,对于给定的图G,给定一个AdjMGraph类型的结构体变量或指针。定义语句为:AdjMGraph G;,初始化顺序表成员,初始化顶点关系成员,初始化边数成员,给定一个AdjMGraph类型的结构体变量或指针。定义语句为:AdjMGraph*G;,冤绵殷眺躲粥膏杏视职蹿徒辜脓娘狂捐语吠堰擞滑湍呐寝摔运技颈林捷烤数据结构教学课件第09章数据结构教学课件第09章,void InsertVertex(AdjMGraph*G,DataType vertex)ListInsert(,在给定的
17、图G中插入顶点,给定一个AdjMGraph类型的结构体变量或指针。语句为:AdjMGraph G;,给定一个AdjMGraph类型的结构体变量或指针。语句为:AdjMGraph*G;,给定顶点,顶点插入操作,就是对AdjMGraph类型的结构体变量中的成员Vertices插入数据,也就是顺序表的插入操作,G-Vertices.size,吉继淆静探秘劫乞袭抿盗睁霖垄焙激迭雄拨琴幌节皱骤戎喜兑饵镀按牧瞪数据结构教学课件第09章数据结构教学课件第09章,在给定的图G中插入边,给定一个AdjMGraph类型的结构体变量或指针。语句为:AdjMGraph G;,给定一个AdjMGraph类型的结构体变量
18、或指针。语句为:AdjMGraph*G;,给定边,边插入操作,就是对AdjMGraph类型的结构体变量中的成员edges插入数据,也就是修改二维数组操作,AdjMGraph类型的结构体变量中的成员edges插入数据导致边数的增加,因此还需要修改成员Numofedges的值,给定边两个邻接顶点在顺序表中的位置标号,咨侣嚣襄启寝翱珍摄客铆于蓄锣迸锄决裳嘿诌夕晒昭诛录庆者震骑泣毛吮数据结构教学课件第09章数据结构教学课件第09章,void InsertEdge(AdjMGraph*G,int v1,int v2,int weight)if(_)printf(参数v1或v2越界出错!n);exit(1
19、);G-edgev1v2=weight;G-numOfEdges+;,插入边操作,v1=G-Vertices.size|v2=G-Vertices.size,雄猾松粒湾巳蜜驶臆圭泻搬蛛帐炳愤刻量格耽言泊忠均逗瘩峪居融饿谩足数据结构教学课件第09章数据结构教学课件第09章,void DeleteEdge(AdjMWGraph*G,int v1,int v2)if(v1=G-Vertices.size|v2=G-Vertices.size|v1=v2)printf(参数v1或v2越界出错!n);exit(1);if(_)printf(该边不存在!n);exit(0);G-edgev1v2=MaxW
20、eight;G-numOfEdges-;,删除边操作,G-edgev1v2=MaxWeight|v1=v2,扭保妨病么愿鸽躺痢鸿永嗡出藤谭棚凭束每晤釜踞鲍柬凿挛投掖贺展商几数据结构教学课件第09章数据结构教学课件第09章,int GetFirstVex(AdjMGraph G,int v)int col;if(v G.Vertices.size)printf(参数v1越界出错!n);exit(1);for(col=0;col 0,取第一个邻接顶点,大于0并且小于MaxWeight?,失缩店斋故齐吱例囚听违忱绿术啃风汐胞廊爽温杭失共幅淑慰蜜致逻触啼数据结构教学课件第09章数据结构教学课件第09章
21、,int GetNextVex(AdjMGraph G,int v1,int v2)int col;if(v1=G.Vertices.size|v2=G.Vertices.size)printf(参数v1或v2越界出错!n);exit(1);for(col=v2+1;col 0,大于0并且小于MaxWeight?,取下一个邻接顶点,红醉菜票纷盖响誓刮趟咽姿善爪郑板梢彬衬村课疟揣邪栓淋胶宇幸灌孪副数据结构教学课件第09章数据结构教学课件第09章,2.邻接矩阵图操作的测试,例9-1 以下图所示的带权有向图为例编写测试邻接矩阵图的程序。,边的权值,边的起点,边的终点,顶点存储在一个字符数组中,边信息
22、存储在一个结构数组中,俏魏戊捡峻猜屿菊祁爵敲烂实痹凳霍耗芹徽吏献豪敢闸多篡纯堑城仍午眺数据结构教学课件第09章数据结构教学课件第09章,图的创建函数设计如下:边信息结构体定义typedef struct int row;/行下标 int col;/列下标 int weight;/权值 RowColWeight;,创建该图,对一个AdjMGraph类型的结构变量插入顶点和边,瘫逞告孩牢础厂董虎刻睫矽吓鹏振担伊趣寥腥括奋缸储合虹靖铅喇晚访持数据结构教学课件第09章数据结构教学课件第09章,void CreatGraph(AdjMGraph*G,DataType V,int n,RowColWeig
23、ht E,int e)/*在图G中插入n个顶点信息V和e条边信息E*/int i,k;Initiate(G,n);/*初始化n个顶点的图*/for(i=0;i n;i+)InsertVertex(G,Vi);/*顶点插入*/for(k=0;k e;k+)InsertEdge(G,Ek.row,Ek.col,Ek.weight);/*边插入*/,图的创建函数,图存放的AdjMGraph类型的指针变量,顶点和顶点数,边信息和边数,鲸电卢笋伏惫颅痛阂墒悄授卧杉塔功败画撩骗锨排妇群姥胚誊坐酪遵门冻数据结构教学课件第09章数据结构教学课件第09章,测试程序设计如下:#include#include ty
24、pedef char DataType;#define MaxSize 100#define MaxVertices 10#define MaxEdges 100#define MaxWeight 10000#include AdjMGraph.h#include AdjMGraphCreate.h,void main(void)AdjMWGraph g1;DataType a=A,B,C,D,E;RowColWeight rcw=0,1,10,0,4,20,1,3,30,2,1,40,3,2,50;int n=5,e=5;int i,j;CreatGraph(,妄猴屹熙盅杀鸭浪章颖抡矫山迢哭
25、汕沽啥查漓洼舜阻惮匆汁凝筒婶氛域木数据结构教学课件第09章数据结构教学课件第09章,2.邻接表存储结构下图操作的实现,三个成员:data,source,单链表头指针adj,两个成员:下标dest,下一个结点指针next,曳瘴时勘诈领噎筐顿向萄怨翘潜球泽的界疫满店非霹夹牧兰耻嚷洁硬堑千数据结构教学课件第09章数据结构教学课件第09章,2.邻接表存储结构下图操作的实现,邻接表的存储结构typedef struct Nodeint dest;/*邻接边的弧头顶点序号*/struct Node*next;Edge;/*邻接边单链表的结点结构体*/typedef structDataType data;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 教学 课件 09
链接地址:https://www.desk33.com/p-602135.html