什么拓扑排序讲.pptx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

设G=(V,E)是一个具有n个顶点的有向图,V中顶点序列v1,v2,…,vn称为一个拓扑序列,当且仅当该顶点序列满足下列条件:若i,j是图中的边(或从顶点i?j有一条路径):1、什么是拓扑排序在一个有向图中找一个拓扑序列的过程称为拓扑排序。8.6拓扑排序则在拓扑序列中顶点i必须排在顶点j之前。ijij1/11

课程代号课程名称先修课程C1高等数学无C2程序设计无C3离散数学C1C4数据结构C2,C3C5编译原理C2,C4C6操作系统C4,C7C7计算机组成原理C2例如,计算机专业的学生必须完成一系列规定的基础课和专业课才能毕业,假设这些课程的名称与相应代号有如下关系:2/11

课程之间的先后关系可用有向图表示:C1C3C4C2C7C6C5可以这样排课:3/11C1-C3-C2-C4-C7-C6-C5C2-C7-C1-C3-C4-C5-C6第1学期第2学期

(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它。(2)从图中删去该顶点,并且删去从该顶点发出的全部有向边。(3)重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。2、拓扑排序步骤4/11

C1C3C4C2C7C6C5拓扑排序演示产生一个拓扑序列:C1C3C2C7C4C6C5排序完成5/11

typedefstruct //表头结点类型{Vertexdata; //顶点信息intcount; //存放顶点入度ArcNode*firstarc; //指向第一条边}VNode;3、拓扑排序算法设计将邻接表定义中的VNode类型修改如下:用于找入度为0的顶点6/11

voidTopSort(AdjGraph*G) //拓扑排序算法{inti,j;intSt[MAXV],top=-1; //栈St的指针为topArcNode*p;for(i=0;iG-n;i++) //入度置初值0 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; }}拓扑排序算法如下:修改后的含n个顶点的邻接表7/11

8/11for(i=0;iG-n;i++) //将入度为0的顶点进栈 if(G-adjlist[i].count==0) { top++; St[top]=i; }while(top-1) //栈不空循环{ i=St[top];top--; //出栈一个顶点i printf(%d,i); //输出该顶点 p=G-adjlist[i].firstarc; //找第一个邻接点 while(p!=NULL) //将顶点i的出边邻接点的入度减1 {j=p-adjvex; G-adjlist[j].count--; if(G-adjlist[j].count==0) //将入度为0的邻接点进栈 {top++; St[top]=j; } p=p-nextarc; //找下一个邻接点 }}}

【例(补充)】对如图所示的图进行拓扑排序,可以得到不同的拓扑序列个数是。A.4 B.3 C.2 D.1eabcd解:不同的拓扑序列有:aebcd、abced、abecd。答案为B。注:2010年全国考研题9/11

思考题:?一个有向图中存在回路,能否进行拓扑排序??一个有向图能够产生所有顶点的拓扑序列,该图一定是有向无环图吗?10/11

━━本讲完━━11/11

文档评论(0)

159****9610 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6044052142000020

1亿VIP精品文档

相关文档