《数据结构(C语言版)》教案 第8章 图(电子版).docVIP

《数据结构(C语言版)》教案 第8章 图(电子版).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 图 本章教学提要 教学重点:图的概念及术语 图的存储结构 图的连通性 图的深度优先搜索和广度优先搜索 教学难点:图的深度优先搜索和广度优先搜索 最短路问题 本章教学内容 8.1图的概念及术语 图是一种数据结构,它的形式化定义是:  G=(V,R) 这里G表示一个图,V是表示各个数据对象的顶点集合,R是V中若干顶点对的集合,若有某两顶点的点对属于R,则在图G中存在这两点间的直接通路。可见,图是由点的集合与点对的集合共同构成的。 设x和y都是V中的顶点,x和y的点对属于R,如果该点对是个有序点对就表示为x,y,它所代表的是从x到y的有方向的直接通路,x称为出点,y称为入点。这种有方向的直接通路也称为弧。 在图G=(V,R)中,如果对A中任意的x,y都有y,x也属于A,则称G为无向图,此时有序点对x,y和y,x可用一个无序点对(x,y)来表示,(x,y)称为边,x和y都称为此边的端点。 若x,y属于A,则称点x邻接点y,点x在g中邻接的所有点的集合称为x的出邻域,邻接x的所有点的集合称为x点的入邻域,x的出邻域的点数称为x的出度,x的入邻域的点数称为x的入度。在无向图中,点的出邻域等于入邻域,称为邻域。点的出度等于入度,称为点的度。如果图G的每个点的度数都是k,则称G为k正则图。   边(x,y)与x和y的关系都叫做关联,所以某点的度又可理解为与它关联的边数。一个图中除了顶点表示数据对象外,弧或边也可以有自己的数据,这些数据叫做权,例如两点间的距离、 从一点到邻接点的某项费用等都可以作为弧或边的权,这种弧或边带有数据的加权图称为网。   设图G1=(V1,R1),如果V1是V的子集,且R1是R的子集,则称图G1是G=(V,R)的子图。如果图G中的任意两点x、y,都存在一条直接或间接的通路p(x,y),则称G为连通图。如果连通图中的任意两点x和y之间都至少有k条互不相交的路径(除x和y没有相同点的路径),这个图可称为k连通图。在连通图中有一类图,从上面随便一点出发,都可以走遍每个点而不重复,并且还能回到出发点,这类图称为H图(在某些书中又称为哈密尔顿图)。一个图即使不是连通图,也可能包含若干连通子图。如果图G中任意点都没有连接自己的边或弧,而且不存在通向同一点的两条弧或边,则G可称为简单图,否则是多重图。设图G=(V,E)是简单图。如果任意两点在图中都相邻,则称此图为完全图。 8.2图的存储结构 图的存储结构:多重表;邻接矩阵;关联矩阵;邻接表;十字链表。 每个顶点都用包含多个指针的节点来表示,每个指针都可指向一个邻接点。而每个节点本身也是一个指针类型的结构,结构中NODE类型的指针个数依图中点的最大度数而定。如果点的度数差异较大,那么度数较小的点必然有不少指针要空指,造成浪费。它比较适合于正则图、完全图等特殊类型的图的存储。 建立一个完整的多重表还必须包括一个表头指针,它专门指向多重表的一个节点,通过它能进入这个图和访问这个图。还要注意,在节点中不指向任何节点的指针必须指向空。 把图的n个点的数据用一维数组存储,而用另一个n×n的二维数组表示每一条弧或边。设二维数组是r,具体的方法是用r(i,j)=1表示从i到j存在一条弧;反之,如果这条弧不存在,则r(i,j)=0。若表示一个网,可适当改变这两个特征值的用法,如让对应邻接的数组元素等于该条弧或边上的权,而让对应不邻接的数组元素取某个不代表权数的特定值。这个二维数组就是这个图的邻接矩阵。   如果说邻接矩阵是着眼于点与点的关系来表示一个图,那么关联矩阵则是着眼于点与边的关系来表示图。 邻接表中既包含了点的信息,也包含了弧或边的信息。具体的做法是为每个节点建立一个链表,每个以此点为出点的弧在此链中都占有一个节点,节点中可以包含3个域:存放有关此弧信息的域;存放入点位置信息(例如点号)的域;指向同链中下个弧节点的指针域。   十字链表是将邻接表和逆邻接表结合而成的,因此它具有这两种链表的优点。整个链表连接非常紧密,其中包含顶点和弧两种节点。顶点节点中有数据域和两个指针域,一个指向以此点为出点的弧连接成的链的第一节点,另一个指向以此点为入点的链的第一节点。弧的节点中可以有关于弧的数据域和指针域,指针域有4个,一个是其在相同出点的弧的链中指向下一节点的指针,一个是其在相同入点的弧的链中指向下一节点的指针,另两个分别指向此弧的出点和入点。这种表适用于有向图,它必须有一个专门的指针,指向表中的一个节点,以便对图的访问和处理。 8.3图的深度优先搜索 有了图的存储结构,我们就可以从图中的某一点出发,去查询需要的一个或多个点,也可以去寻找某条路径,由于这些搜索可能要找遍全图,所以也叫遍历。图的遍历按其主要搜索策略的不同分为深度优先和广度优先。 深度优先的过程:从某

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档