首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下函数说明和C代码,将C程序中(1)~(5)空缺处的语句填写完整。 [说明] 函数int Toplogical(LinkedWDigraphG)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中,图G表示一个具有n个顶点的A
阅读以下函数说明和C代码,将C程序中(1)~(5)空缺处的语句填写完整。 [说明] 函数int Toplogical(LinkedWDigraphG)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中,图G表示一个具有n个顶点的A
admin
2010-01-15
31
问题
阅读以下函数说明和C代码,将C程序中(1)~(5)空缺处的语句填写完整。
[说明]
函数int Toplogical(LinkedWDigraphG)的功能是对图G中的顶点进行拓扑排序,并返回关键路径的长度。其中,图G表示一个具有n个顶点的AOE-网,图中顶点从1~n依次编号,图G的存储结构采用邻接表表示,其数据类型定义如下。
例如,某AOE-网如图6-22所示,其邻接表存储结构如图6-23所示。
[函数]
选项
答案
是一道要求读者掌握数据结构中拓扑排序和求关键路径问题的算法分析及设计题。本题的解答思路如下。 AOE网(Activity On Edge network,边表示活动的网)是一个带权的有向无环图,其中顶点表示事件,弧表示活动,权表示活动持续的时间。通常,AOE网可以用来估算工程的完成时间。 在AOE网中,入度为0的顶点为源点,出度为0的顶点为汇点。由于有些活动可以并行地执行,因此从源点到汇点的路径中,长度最长的路径称为关键路径(路径长度即指路径上各种活动持续时间之和)。表示事件的顶点存在最早、最晚发生时间。若以顶点V1表示源点、顶点Vn表示汇点,则汇点的最早发生时间和最晚发生时间是一致的,并且等于关键路径的长度。 设顶点Vj的最早发生时间用ve(j)表示,则ve(j)是指从源点V1到Vj的最长路径长度(时间)。这个时间决定了所有从Vj发出的弧所表示的活动能够开工的最早时间。 ve(j)计算方法为 [*] 其中,T是所有到达顶点j的弧的集合;dut(<I,j>)是弧<I,j>上的权值;n是网中的顶点数(即汇点的序号)。 显然,上式是一个从源点开始的递推公式。Ve(j)的计算必须在Vj的所有前驱顶点的最早发生时间全部求出后才能进行。这样必须对AOE网进行拓扑排序,然后按拓扑有序序列逐个求出各顶点事件的最早发生时间。 拓扑排序是将有向无环图中所有顶点排成一个线性序列的过程,并且该序列满足:若在有向图中从顶点Vi到Vj有一条路径,则在该线性序列中,顶点Vi必然在顶点Vj之前。可见,拓扑排序序列是由有向图中的所有顶点构成的一个线性序列,在这个序列中体现了所有顶点之间的优先关系。 对AOE网进行拓扑排序的步骤如下: ①首先在AOE网中选择一个入度为0(没有前驱)的顶点且输出它。 ②然后从网中删除该顶点,并且删除以该顶点为始点的所有引出边。 ③重复上述两个步骤,直至网中不存在入度为0的顶点为止。 在拓扑排序过程中,有可能同时存在多个入度为0的顶点,函数中用顺序栈Stack[]暂存入度为0且没有进入拓扑序列的顶点。 本试题所给出的算法首先申请了3块连续的地址空间,分别用来存放关键路径长度、网中各顶点的入度及入度为0的顶点编号,它们的首地址分别存放在指针变量Ve、indegree、Stack中。 算法主体是由3个for循环和3个while循环组成。第1个for循环,即for(j=1;j<=G.n;j++){ve[j]=0; indegree[j]=O;},主要完成数组初始化的功能。 进行拓扑排序之前,应先求出网中每个顶点的入度并存入数组indegree[]中,从而将“从网中删除该顶点及其与该顶点有关的所有边”的操作转换为“相关顶点的入度减1”,一旦发现某个顶点的入度变为0,就将其编号压入堆栈。从而将选择入度为0的顶点转化为从Stack中弹出栈顶元素所代表的顶点。 题目中顶点从1开始编号,顶点Vi的编号为i,第2个for循环代码主要完成求网中各个顶点的入度的功能。 [*] 在有向图中,若以V2为尾的弧有<V2,V4>且权值为30、<V2,V6>且权值为50,则其的邻接表表示形式是:V2→4,30→6,50^。 因此,扫描顶点V2的邻接表可以将邻接于V2的所有顶点的入度加1,即(1)空缺处应填入“indegree[p ->adjvex)++”或其等价形式。 第3个for循环语句主要完成求网中入度为0的顶点并保存其编号的功能。以下代码实现拓扑排序并求解各个顶点时事件的最早发生时间。 [*] 由于入度为0的顶点由栈中弹出,根据变量w在后续代码中所起的作用——存放网中没有直接前驱的顶点,并通过printf语句输出,可知(2)空缺处应填入“Stack[top--]”或其等价形式。 然后,在网中删除没有直接前驱的顶点和以该顶点为始点的所有引出边,并通过内嵌的while循环语句把这些引出边对应的终点的入度减1,即将邻接到顶点w的各个顶点(p->adjvex)的入度减1,再判断它们是否也是入度为0的顶点。因此(3)空缺处应填入“indegree[p->adjvex]——”或其等价形式。 同时,对于顶点p->adjveX而言,当删除其所有引入边之后,从源点出发到达它的最长路径长度也就计算出来了,所以每删除一条到达顶点p->adjvex的引入边,都要查看一下最长路径长度是否需要更新。因此,(4)空缺处填入“ve[w]+p->weight>ve[p->adjvex]”或其等价形式。 算法程序的最后部分,通过return语句返回该图的关键路径长度,即汇点的最早发生时间(该AOE网的关键路径长度)。由于AOE网中汇点未必是编号最大的顶点,但它必然是从栈中弹出的最后一个顶点,因此(5)空缺处填入“ve[w]”或其等价形式。
解析
转载请注明原文地址:https://kaotiyun.com/show/W0DZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
在面向对象分析和设计中,用类图给出系统的静态设计视图,其应用场合不包括___________(45)。下图是一个UMI,类图,其中类University和类School之间是___________(46)关系,类Person和类PersonRecord之间
POP3协议采用___________(23)模式,客户端代理与POP3服务器通过建立___________(24)连接来传送数据。(23)
下列关于软件开发的叙述中,与提高软件可移植性相关的是(19)。
下图为某设计模式的类图,类State和Context的关系为(49),类(50)是客户使用的主要接口。(50)
在结构化分析方法中,数据流图描述数据在系统中如何被传送或变换,反映系统必须完成的逻辑功能,用于(38)建模。在绘制数据流图时,(39)。(38)
在数据库逻辑结构设计阶段,需要(20)阶段形成的(21)作为设计依据。(21)
假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为10μs,由缓冲区送至用户区的时间是5μs,系统对每个磁盘块数据的处理时间为2μs。若用户需要将大小为10个磁盘块的Docl文件逐块从磁盘读入缓冲区,并送至用户区进行处理,那么采用单缓冲区需要花费的时间
假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为10μs,由缓冲区送至用户区的时间是5μs,系统对每个磁盘块数据的处理时间为2μs。若用户需要将大小为10个磁盘块的Docl文件逐块从磁盘读入缓冲区,并送至用户区进行处理,那么采用单缓冲区需要花费的时间
以下关于软件测试原则的叙述中,正确的是______。①所有软件测试都应追溯到用户需求②尽早地和不断地进行软件测试③完全测试是不可能的④测试无法发现软件潜在的缺陷⑤需要充分注意测试中的群集现象
某软件公司在招聘软件评测师时,应聘者甲向公司做如下保证:①经过自己测试的软件今后不会再出现问题;②在工作中对所有程序员一视同仁,不会因为在某个程序员编写的程序中发现的问题多,就重点审查该程序,以免不利于团结;③承诺不需要其他人员,自己就可以独立进行测
随机试题
A、①B、②C、③D、④C
A.《审视瑶函》B.《原机启微》C.《证治准绳.七窍门》D.《眼科菁华录》E.《秘传眼科纂要》
某马场同槽饲喂的两匹马精神沉郁,流浆性或黏性鼻液,随后鼻黏膜出现小米粒大的黄白色结节,周围有红晕,下颌淋巴结肿胀。该病可能是
患者,女,30岁。发现昏睡不醒,流涎、大汗,呼吸有蒜臭味。脉搏110次/分,瞳孔针尖大小。最可能的诊断是
某工厂,设计年产销量为3万件,每件的售价为300元,单位产品的可变成本为100元,单位产品营业税及附加40元,年固定成本280万元,则该厂不亏不盈时,最低年产销量为( )。
某市服装生产企业为增值税一般纳税人,2016年2月发生以下经营业务:(1)购人一批材料,取得的增值税专用发票上注明价款150万元,增值税税额25.5万元;委托甲运输企业(增值税一般纳税人)运送材料,取得的增值税专用发票上注明运费5万元。(2)接受乙税务
企业在资产负债表日,对某项劳务,如不能可靠地估计所提供劳务的交易结果,则对该项劳务正确的会计处理是()。
关联方交易在会计报表附注中需披露的交易要素不包括()。
根据市政府整顿农贸市场的决定,某区工商局和公安局对农贸市场进行检查。在检查过程中,因某个体户乱设摊点,给予其吊销营业执照的处罚。该个体户不服,申请复议。此案应以()为被申请人。
Readthearticlebelowaboutexportingandthequestions.Foreachquestion(13-18),markoneletter(A,B,CorD)onyourAnsw
最新回复
(
0
)