- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 检测有向环的一种方法是对AOV网络构造它的拓扑有序序列。即将各个顶点 (代表各个活动)排列成一个线性有序的序列,使得AOV网络中所有应存在的前驱和后继关系都能得到满足。 这种构造AOV网络全部顶点的拓扑有序序列的运算就叫做拓扑排序。 如果通过拓扑排序能将AOV网络的所有顶点都排入一个拓扑有序的序列中, 则该网络中必定不会出现有向环。 * 拓扑排序的方法 ① 输入AOV网络。令 n 为顶点个数。 ② 在AOV网络中选一个入度为0(没有前驱)的顶点, 并输出之; ③ 从图中删去该顶点, 同时删去它的所有出边; ④ 重复以上 ②、③步, 直到 全部顶点均已输出,拓扑有序序列形成,拓扑排序完成;或 图中还有未输出的顶点, 但已跳出处理循环。说明图中还剩下一些顶点, 它们都有直接前驱。这时网络中必存在有向环。 * C0 C1 C2 C3 C4 C5 拓扑排序的过程 (a) 有向无环图 (b) 输出顶点C4 (c) 输出顶点C0 C2 C5 C1 C0 C3 C4 C1 C2 C5 C3 C0 C2 C5 C1 C3 (d) 输出顶点C3 * C1 C2 C5 (e) 输出顶点C2 C5 C1 (f) 输出顶点C1 C5 (g) 输出顶点C5 最后得到的拓扑有序序列为 C4 , C0 , C3 , C2 , C1 , C5 。它满足图中给出的所有前驱和后继关系,对于本来没有这种关系的顶点,如C4和C2,也排出了先后次序关系。 (h) 拓扑排序完成 * 如果AOV网络中存在有向环,此AOV网络所代表的工程是不可行的。 例如, 对学生选课工程图进行拓扑排序, 得到的拓扑有序序列为 C1 , C2 , C3 , C4 , C5 , C6 , C8 , C9 , C7或 C1 , C8 , C9 , C2 , C5 , C3 , C4 , C7 , C6 C8 C3 C5 C4 C9 C6 C7 C1 C2 * AOV网络及其邻接表表示 C0 C1 C2 C3 C4 C5 C0 C1 C2 C3 ∧ C4 C5 ∧ 0 1 2 3 4 5 indegree data firstarc 1 3 0 1 0 3 1 adjvex nextarc 3 ∧ 5 ∧ 1 5 ∧ 0 1 5 ∧ * 使用一个存放入度为零的顶点的栈, 供选择和输出无前驱的顶点。 拓扑排序算法可描述如下: 建立入度为零的顶点栈; 当入度为零的顶点栈不空时, 重复执行 从顶点栈中退出一个顶点, 并输出之; 从AOV网络中删去这个顶点和它发出的边, 边的终顶点入度减一; 如果边的终顶点入度减至0, 则该顶点进入度为零的顶点栈; 如果输出顶点个数少于AOV网络的顶点个数, 则报告网络中存在有向环。 * 拓扑排序的算法 Status TopologicalSort (ALGraph G) { FindInDegree(G,indegree); //求各顶点的入度 InitStack (S); //入度为零的顶点栈初始化 for ( int i = 0; i G.vexnum; i++ ) //入度为零顶点 if ( indegree[i] == 0 ) Push(S, i); //进栈 count=0; while ( !StackEmpty(S) ) { //中途栈空,转出 Pop( S, i ); cout G.vertices[i].data; count++; * for(p=G.vertices[i].firstarc;p;p=p-nextarc){ int k = p-adjvex; //另一顶点 if ( (--indegree[k]) == 0 ) //顶点入度减一 Push( S, k ); //顶点的入度减至零, 进栈 } } if(countG.vexnum) return ERROR; } * 二、用边表示活动的网络(AOE网络) 有向边 活动 (Activity) 边上权值 活动持续时间 (Duration) 顶点 事件 (Event) 这样的有向图叫做用边表示活动的网络, 简称 AOE ( Activity On Edges ) 网络。 AOE网络在某些工程估算方面非常有用。
文档评论(0)