C语言入门教程全第9章[宣讲].pptVIP

  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文档。上传文档
查看更多
图9.5.8 最短路径 求最短路径的算法思想如下:先找出从原点v0到各终点vk的直达路径(v0,vk),即通过一条弧到达的路径。从这些路径中找出一条长度最短的路径(v0,u),然后对其余各条路径进行适当调整:若在图中存在弧(u,vk),且(u,vk)和(v0,u)两条弧上权之和小于弧(v0,vk)的权,则以路径(v0,u,vk)代替(v0,vk)。在调整后的各条路径中,再找长度最短的路径,以此类推。迪杰斯特拉给出了一个按路径长度递增次序产生最短路径的算法: 用邻接矩阵COST表示有向图G=(V,E),其中设V中有n+1个顶点,COST[i][j]代表(Vi,Vj)上的权,如果边(Vi,Vj)不存在,则COST[i][j]=(在计算机中用允许的最大值代替),若i=j,也取COST[i][j]=。同时,引入一个数组DIST[i]表示当前所找到的从始点V0到每个终点Vi的最短路径的长度;再引入一个数组PATH[i]表示从始点V0到每个终点Vi的最短路径。集合S用于存放已求得最短路径的顶点。 算法步骤如下: 在有向图中,通常用带有箭头的边(路径)来连接两个有关联的顶点(由直接前驱节点指向直接后继节点)。如图9.5.2所示为两个有向图。若任意一对顶点之间都存在路径,则称该有向图为强连通图,如图9.5.2(b)所示。 图9.5.2 有向图 在具有n个顶点的无向图中,边的最大数目为n(n–1)/2。边数达最大值的无向图称为无向完全图。 若一个有向图中每一对顶点之间都存在两条不同方向的边,则称该有向图为有向完全图,此时在n个顶点的有向图中,其边数为n(n–1)。 在图中,一个顶点的直接后继个数称为该顶点的出度,其直接前驱个数称为该顶点的入度。一个顶点的入度与出度之和称为该顶点的度。对于无向图来说,其中每一个顶点的入度等于该顶点的出度。图中顶点的最大度称为图的度。 实际应用中,图中的每条边可以标上具有某种含义的数值,此数值称为该边的权(weight);边上带有权的图称做带权图,也称做网(network)。带权图有着极为广泛的应用,例如,在用图表示有公共交通联系的一组城市时,带权图可以表示每两个城市(即图中两个顶点)之间的距离、车费、班次数目等。 2.图的基本运算 由于图中的任何一个顶点都可看成第一个顶点, 因此任一顶点的邻接点之间不存在次序问题。为了操作方便,人为地将图中的顶点按一定顺序排列起来,这就出现了对顶点和其邻接点的相应操作,下面列出图的几种基本运算: (1)定位顶点。 (2)取顶点。 (3)求第一个邻接点。 (4)求下一个邻接点。 (5)插入顶点。 (6)插入弧。 (7)删除顶点。 (8)删除弧。 9.5.2 图的存储结构 由于图的结构比较复杂,图中任意两个顶点之间都有可能存在联系,因此无法用数据元素在存储空间中的物理位置来表示各数据元素之间的直接前驱和直接后继关系。图的存储方法很多,常用的有邻接矩阵法、邻接表法、十字链表法、多重邻接表 法等。由于图中各顶点的度各不相同,其最大度数与最小度数可能相差很大,因此在实际应用中,一般是根据对图的具体运算来选取合适的存储结构。我们这里重点介绍常用的两种存储方法——邻接矩阵和邻接表。 1.邻接矩阵 假设图中总共有n个顶点,其顶点值分别为d1,d2,…,dn,并且用自然数将它们依次编号为1,2,…,n。为了存储图,首先用一个长度为n的一 维数组D(1:n)来存放图中各数据顶点的信息,再用一个n阶的二维数组R(1:n,1:n)来存放图中各顶点的关联信息。其中二维数组R称为图的邻接矩阵,也可称为关联矩阵。在邻接矩阵R中,每一个元素R(i,j) (1≤i≤n,1≤j≤n)的定义如下: 例如,图9.5.1(a)与图9.5.1(b)所示图的邻接矩阵分别如下: 图9.5.2(a)与图9.5.2(b)所示图的邻接矩阵分别如下: 由上述邻接矩阵可以明显地看出,无向图的邻接矩阵是对称矩阵,且对角线上的元素均为0。这是因为,对于无向图来说,各顶点之间的直接前驱和直接后继关系是对称的,且不考虑顶点自身之间的直接前驱和直接后继关系。有向图的邻接矩阵不一定是对称的,且其对角线上的元素也不一定是0,因为有可能要考虑顶点自身之间的直接前驱和直接后继关系。 如果考虑到无向图的邻接矩阵是对称矩阵,且其对角线上的元素均为0,则在实际存储邻接矩阵时,只需存储其右上三角(或左下三角)的元素即可,这样,具有n个顶点的无向图,其邻接矩阵的存储容量为n(n–1)/2。根据邻接矩阵,很容易判断图中任意两个顶点之间是否有边关联,并且也很容易求得各顶点的度。

文档评论(0)

朱素云 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档