图的广度优先遍历.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文档。上传文档
查看更多
* 假设有向图G=(V,E)采用邻接矩阵cost存储,另外设置一个二维数组A用于存放当前顶点之间的最短路径长度,分量A[i][j]表示当前顶点vi到顶点vj的最短路径长度。 弗洛伊德算法的基本思想: 递推产生一个矩阵序列A0,A1,…,Ak,…,An 其中Ak[i][j]表示从顶点vi到顶点vj的路径上所经过的顶点编号不大于k的最短路径长度。 初始时,有A-1[i][j]=cost[i][j] * 当求从顶点vi到顶点vj的路径上所经过的顶点编号不大于k+1的最短路径长度时,要分两种情况考虑: 一种情况是该路径不经过顶点编号为k+1的顶点,此时该路径长度与从顶点vi到顶点vj的路径上所经过的顶点编号不大于k的最短路径长度相同; 另一种情况是从顶点vi到顶点vj的最短路径上经过编号为k+1的顶点。 * Ak+1[i,j]=MIN(Ak[i,j],Ak[i,k+1]+Ak[k+1,j] * 该路径可分为两段: (1) 从顶点vi到顶点vk+1的最短路径; (2) 从顶点vk+1到顶点vj的最短路径。 此时最短路径长度等于这两段路径长度之和。这两种情况中的较小值,就是所要求的从顶点vi到顶点vj的路径上所经过的顶点编号不大于k+1的最短路径。 弗洛伊德思想可用如下的表达式来描述: A-1[i][j]=cost[i][j] Ak+1[i][j]=MIN{ Ak[i][j], Ak[i][k+1]+Ak[k+1][j] } (0≤k≤n-1) * 设G=(V,E)是一个具有n个顶点的有向图,V中顶点序列v1,v2,…,vn称为一个拓扑序列,当且仅当该顶点序列满足下列条件: 若vi,vj是图中的边(即从顶点vi到vj有一条路径),则在序列中顶点vi必须排在顶点vj之前。 在一个有向图中找一个拓扑序列的过程称为拓扑排序。 对有向图进行拓扑排序,可检查有向图中是否存在回路。 8.6 拓扑排序 * 课程代号 课程名称 先修课程 C1 高等数学 无 C2 程序设计 无 C3 离散数学 C1 C4 数据结构 C2,C3 C5 编译原理 C2,C4 C6 操作系统 C4,C7 C7 计算机组成原理 C2 例如,计算机专业的学生必须完成一系列规定的基础课和专业课才能毕业。 课程之间的先后关系 可用有向图表示: 拓扑序列1:C1-C3-C2-C4-C7-C6-C5 拓扑序列2:C2-C7-C1-C3-C4-C5-C6 按照任何一个拓扑序列都可以顺序地进行课程学习。 * 拓扑排序方法如下: (1) 从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它。 (2) 从网中删去该顶点,并且删去从该顶点发出的全部有向边。 (3) 重复上述两步,直到剩余的网中不再存在没有前驱的顶点为止。若此时网不空,表明网中有环。 * a b c g h d f e a b h c d g f e 一个AOV-网的拓扑排序 * 为了实现拓扑排序的算法,对于给定的有向图,采用邻接表作为存储结构,为每个顶点设立一个链表,每个链表有一个表头结点,表头结点中增加一个存放顶点入度的域count。 即将邻接表定义中的VNode类型修改如下: typedef struct /*表头结点类型*/ { Vertex data; /*顶点信息*/ int count; /*存放顶点入度*/ ArcNode *firstarc; /*指向第一条弧*/ } VNode; * void TopSort(ALGragh *G) { int i,j;int St[MAXV],top=-1; /*栈St的指针为top*/ ArcNode *p; for (i=0;iG-n;i++) G-adjlist[i].count=0; for (i=0;iG-n;i++) { p=G-adjlist[i].firstarc; while(p!=NULL) { G-adjlist[p-adjvex].count++; p=p-nextarc; } } for (i=0;iG-n;i++) if (G-adjlist[i].count==0) /*

文档评论(0)

iris + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档