首页/ 题库 / [问答题]阅读下列说明和C代码,将应填入(n)处的的答案

阅读下列说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 说明:设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量Wij和价格Cij。设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。采用回溯法来求解该问题。首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{1,2,…,m},将解空间用树形结构表示。接着从根节点开始,以深度优先的方式搜索整个解空间。从根节点开始,根节点成为活节点,同时也成为当前的扩展节点。向纵深方向考虑第一个部件从第一个供应商处购买,得到一个新节点。判断当前的机器价格(C11)是否超过上限(cc),重量(W11)是否比当前已知的解(最小重量)大,若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,根节点不再是扩展节点。继续向纵深方向考虑第二个部件从第一个供应商处购买,得到一个新节点。同样判断当前的机器价格(C11+C21)是否超过上限(cc),重量(W11+W21)是否比当前已知的解(最小重量)大。若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,原来的节点不再是扩展节点。以这种方式递归地在解空间中搜索,直到找到所要求的解或者解空间中已无活节点为止。 C代码:下面是该算法的C语言实现。 (1)变量说明n:机器的部件数。m:供应商数。cc:价格上限。w[][]:二维数组,w[i][j]表示第j个供应商供应的第i个部件的重量。c[][]:二维数组,c[i][j]表示第j个供应商供应的第i个部件的价格。bestW:满足价格上限约束条件的最小机器重量。bestC://最小重量机器的价格。bestX[]:最优解,一维数组,bestX[i]表示第i个部件来自哪个供应商。cw:搜索过程中机器的重量。cp:搜索过程中机器的价格。x[]:搜索过程中产生的解,x[i]表示第i个部件来自哪个供应商。i:当前考虑的部件,从0到n-1。j:循环变量 (2)函数backtrack 代码如下:

问答题
2022-11-23 23:25
查看答案

正确答案
(1)bestX[j]=x[j]
(2)j<>
(3)x[i]=j
(4)cw<>
(5)cp=cp-c[i][j]

试题解析
本题中机器需要3个部件,共3个供应商,每个供应商可提供3种部件,供应商0提供的3个部件数量分别为1、2、3,价格分别为1、2、3;供应商1提供的3个部件数量分别为3、2、1,价格分别为3、2、1;供应商2提供的3个部件数量分别为2、2、2,价格分别为2、2、2。价格上限为4;初始时,满足价格上限约束条件的最小机器重量为8,最小重量机器的价格为0。在回溯过程中,先购买第0个部件,首先选择第0个供应商的部件0,计算总重量和总价格,如果总价格不大于上限cc,则扩展当前节点;然后购买第1个部件,同样先选择第0个供应商的部件1,计算总重量和总价格,如果总价格不大于上限cc,则扩展当前节点,如果当前总价格大于上限cc或者当前总重量比已知的最小重量大,则当前节点成为死节点,返回前一次购买部件所在的节点,同时更新总价格和总重量。因此可将空(2)~(5)补充完整,如下 。 如果得到问题解,将部件的总质量和总价格保存在变量bestW和bestC中,并将部件的来源保存在数组bestX中。数组x中保存搜索过程中产生的解,把x中的元素值赋给数组bestX即可。因此,空(1)处应填入bestX[j]=x[j]。

标签: CMS专题
感兴趣题目
阅读下述关于项目资源冲突管理的叙述,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某电子政务项目涉及到保密信息。项目建设的资源尤其是人力资源必须从甲方单位内部获得,因为如果把项目的部分任务交给分包商,一方面要征得甲方的同意,一方面要求分包商具有相应的保密资质,而保密资质的审核需要很长时间,等待审核结果也需要一段时间,这将严重危及到项目的交付日期。当项目团队内的工程师完成90%的编程和测试任务时,项目承建单位的一名副总裁承揽了一个新项目,他把程序员、测试工程师从该项目上调走,去执行他新承揽的项目。简要叙述如果项目经理希望继续推进该项目,应如何进行?
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】某出版社要制作一批电子出版物,主要工作是将原始的一些纸质文档数字化,并利用多媒体软件制作成多媒体光盘的形式发行,其制作的基本流程图如图14-3所示。 目前制作多媒体作品的软件主要有两种类型:专门的多媒体制作工具和高级语言。试分析这两种工具的特点,并指出该出版社应该选用哪种类型的工具。
阅读下面说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某网络建设项目在商务谈判阶段,建设方和承建方鉴于以前有过合作经历,并且在合同谈判阶段双方都认为理解了对方的意图,因此签订的合同只简单规定了项目建设内容、项目金额、付款方式和交工时间。在实施过程中,建设方提出一些新需求,对原有需求也做了一定的更改。承建方项目组经评估认为新需求可能会导致工期延迟和项目成本大幅增加,因此拒绝了建设方的要求,并让此项目的销售人员通知建设方。当销售人员告知建设方不能变更时,建设方对此非常不满意,认为承建方没有认真履行合同。在初步验收时,建设方提出了很多问题,甚至将曾被拒绝的需求变更重新提出,双方交涉陷入僵局。建设方一直没有在验收清单上签字,最终导致项目进度延误,而建设方以未按时交工为由,要求承建方进行赔偿。将以下空白处填写的恰当的内容,写入答题纸的对应栏内。变更合同价款应按下列方法进行:首先确定(),然后确定变更合同价款。若合同中已有适用于项目变更的价格,则按合同已有的价格变更合同价款。若合同中只有类似于项目的变更价格,则可以参照类似价格变更合同价款。若合同中没有适用或类似项目变更的价格,则由()提出适当的变更价格,经()确认后执行。
阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 说明:一个简单的图形编辑器提供给用户的基本操作包括:创建图形、创建元素、选择元素以及删除图形。图形编辑器的组成及其基本功能描述如下。 (1)图形由文本元素和图元元素构成,图元元素包括线条、矩形和椭圆。 (2)图形显示在工作空间中,一次只能显示一张图形(即当前图形,current)。 (3)编辑器提供了两种操作图形的工具:选择工具和创建工具。对图形进行操作时,一次只能使用一种工具(即当前活动工具,active)。 ①创建工具用于创建文本元素和图形元素。 ②对于显示在工作空间中的图形,使用选择工具能够选定其中所包含的元素,可以选择一个元素,也可以同时选择多个元素。被选择的元素成为当前选中元素(selected)。 ③每种元素都具有相应的控制点。拖曳选定元素的控制点,可以移动元素或者调整元素的大小。 现采用面向对象方法开发该图形编辑器,使用UML进行建模。构建出的用例图和类图分别如图10.39和图10.40所示。 问题1:根据说明中的描述,给出图10.39中U1和U2所对应的用例,以及(1)和(2)处所对应的关系。 问题2:根据说明中的描述,给出图10.40中缺少的C1~C8所对应的类名以及(3)~(6)处所对应的多重度。 问题3:图10.40中的类图设计采用了桥接(Bridge)设计模式,请说明该模式的内涵。
阅读以下说明和C函数,将应填入____处的语句或语句成分写在答题纸的对应栏内。 说明1:函数deldigit(char*s)的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再复制给s。【C函数】 说明2:函数reverse(char*s,intlen)的功能是用递归方式逆置长度为len的字符串s。例如,若串s的内容为"abcd",则逆置后其内容变为"dcba"。【C函数】
阅读以下说明,回答问题,将解答填入答题纸对应的解答栏内。 [说明]如下图是在网络中划分VLAN的连接示意图。VLAN可以不考虑用户的物理位置,而根据功能、应用等因素将用户从逻辑上划分为一个个功能相对独立的工作组,每个用户主机都连接在支持VLAN的交换机端口上,并属于某个VLAN。 若网络用户的物理位置需要经常移动,应采用什么方式划分VLAN?
阅读以下说明,请回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某大楼布线工程基本情况为:一层到四层,必须在低层完成后才能进行高层布线。每层工作量完全相同。项目经理根据现有人员和工作任务,预计每层布线需要一天完成。项目经理编制了该项目的进度计划,并在3月18号工作时间结束后对工作进展情况进行了绩效评估,如表24.2所示: 根据当前绩效,在图24.7中画出AC和EV曲线。分析当前的绩效,并指出绩效改进的具体措施。
阅读以下说明和C++代码,将应填入____处的语句或语句成分写在答题纸的对应栏内。 某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。【C++代码】
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 说明:堆数据结构定义如下。对于n个元素的关键字序列(a1,a2,...,an),当且仅当满足下列关系时称其为堆:在 一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则称为小顶堆。堆常用完全二叉树表示,图8.11是一个大顶堆的例子。 堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先队列采用小项堆。以下考虑最大优先队列。假设现已建好大顶堆A,且已经实现了调整堆的函数heapify(A,n,index)。下面将C代码中需要完善的3个函数说明如下。 (1)heapMaximum(A):返回大顶堆A中的最大元素。 (2)heapExtractMax(A):去掉并返回大顶堆A的最大元素,将最后一个元素"提前"到堆顶位置,并将剩余元素调整成大顶堆。( 3)maxHeapInsert(A,key):把元素key插入到大顶堆A的最后位置,再将A调整成大顶堆。优先队列采用顺序存储方式,其存储结构定义如下: C代码: 问题1:根据以上说明和C代码,填充C代码中的空(1)~(5)。问题2:根据以上C代码,函数heapMaximum,heapExtractMax和maxHeapInsert的时间复杂度的紧致上界分别为(6)、(7)和(8)(用O符号表示)。问题3:若将元素10插入到堆A=(15,13,9,5,12,8,7,4,0,6,2,1)中,调用maxHeapInsert函数进行操作,则新插入的元素在堆A中第(9)个位置(从1开始)。
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】虽然网络上图像资源的急速增长,传统的基于文本的图像检索方式已经开始显得不能适合需求,于是基于内容的图像检索开始被研究。美国普林斯顿大学开发了一款3D图像检索系统,该系统是一个多功能的3D图像检索系统,提供了多种用户查询接口,其中有一种通过画3个剖面的2D轮廓图进行查询,其查询界面和得到的检索结果如图15-5所示。 目前,3D模型被广泛应用到游戏、影视中,请你给出三种3D模型的获取途径。
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】虽然网络上图像资源的急速增长,传统的基于文本的图像检索方式已经开始显得不能适合需求,于是基于内容的图像检索开始被研究。美国普林斯顿大学开发了一款3D图像检索系统,该系统是一个多功能的3D图像检索系统,提供了多种用户查询接口,其中有一种通过画3个剖面的2D轮廓图进行查询,其查询界面和得到的检索结果如图15-5所示。 结合本例,请解释一下什么是基于内容的图像检索。
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】小王平时收集了一些多媒体素材,这些素材包括1.wav、2.psd、3.avi、4.mid、5.mpg、6.mp3、7.mov、8.bmp、9.rm和10.jpg。 为了方便使用,需要把上述文件进行分类,分成声音文件、图像文件、视频文件三类,并分别建立文件夹存放,写出每类文件夹中应包含的文件。
相关题目
阅读下列说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。说明:设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量Wij和价格Cij。设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。采用回溯法来求解该问题。首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{1,2,…,m},将解空间用树形结构表示。接着从根节点开始,以深度优先的方式搜索整个解空间。从根节点开始,根节点成为活节点,同时也成为当前的扩展节点。向纵深方向考虑第一个部件从第一个供应商处购买,得到一个新节点。判断当前的机器价格(C11)是否超过上限(cc),重量(W11)是否比当前已知的解(最小重量)大,若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,根节点不再是扩展节点。继续向纵深方向考虑第二个部件从第一个供应商处购买,得到一个新节点。同样判断当前的机器价格(C11+C21)是否超过上限(cc),重量(W11+W21)是否比当前已知的解(最小重量)大。若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,原来的节点不再是扩展节点。以这种方式递归地在解空间中搜索,直到找到所要求的解或者解空间中已无活节点为止。C代码:下面是该算法的C语言实现。(1)变量说明n:机器的部件数。m:供应商数。cc:价格上限。w[][]:二维数组,w[i][j]表示第j个供应商供应的第i个部件的重量。c[][]:二维数组,c[i][j]表示第j个供应商供应的第i个部件的价格。bestW:满足价格上限约束条件的最小机器重量。bestC:最小重量机器的价格。bestX[]:最优解,一维数组,bestX[i]表示第i个部件来自哪个供应商。cw:搜索过程中机器的重量。cp:搜索过程中机器的价格。x[]:搜索过程中产生的解,x[i]表示第i个部件来自哪个供应商。i:当前考虑的部件,从0到n-1。j:循环变量(2)函数backtrack

阅读以下说明和C++代码,将应填入____处的语句或语句成分写在答题纸的对应栏内。
某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。【C++代码】

阅读下面说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某网络建设项目在商务谈判阶段,建设方和承建方鉴于以前有过合作经历,并且在合同谈判阶段双方都认为理解了对方的意图,因此签订的合同只简单规定了项目建设内容、项目金额、付款方式和交工时间。在实施过程中,建设方提出一些新需求,对原有需求也做了一定的更改。承建方项目组经评估认为新需求可能会导致工期延迟和项目成本大幅增加,因此拒绝了建设方的要求,并让此项目的销售人员通知建设方。当销售人员告知建设方不能变更时,建设方对此非常不满意,认为承建方没有认真履行合同。在初步验收时,建设方提出了很多问题,甚至将曾被拒绝的需求变更重新提出,双方交涉陷入僵局。建设方一直没有在验收清单上签字,最终导致项目进度延误,而建设方以未按时交工为由,要求承建方进行赔偿。将以下空白处填写的恰当的内容,写入答题纸的对应栏内。
阅读下面说明,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某网络建设项目在商务谈判阶段,建设方和承建方鉴于以前有过合作经历,并且在合同谈判阶段双方都认为理解了对方的意图,因此签订的合同只简单规定了项目建设内容、项目金额、付款方式和交工时间。在实施过程中,建设方提出一些新需求,对原有需求也做了一定的更改。承建方项目组经评估认为新需求可能会导致工期延迟和项目成本大幅增加,因此拒绝了建设方的要求,并让此项目的销售人员通知建设方。当销售人员告知建设方不能变更时,建设方对此非常不满意,认为承建方没有认真履行合同。在初步验收时,建设方提出了很多问题,甚至将曾被拒绝的需求变更重新提出,双方交涉陷入僵局。建设方一直没有在验收清单上签字,最终导致项目进度延误,而建设方以未按时交工为由,要求承建方进行赔偿。将以下空白处填写的恰当的内容,写入答题纸的对应栏内。
阅读下列人力资源管理问题的叙述,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】M是负责某行业一个系统集成项目的项目经理,因人手比较紧张,M从正在从事编程工作的高手中选择了小张作为负责软件子项目的项目经理,小张同时兼任模块的编程工作,这种安排导致软件子项目失控。

阅读以下说明和C函数,将应填入____处的语句或语句成分写在答题纸的对应栏内。
说明1:函数deldigit(char*s)的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再复制给s。【C函数】

说明2:函数reverse(char*s,intlen)的功能是用递归方式逆置长度为len的字符串s。例如,若串s的内容为"abcd",则逆置后其内容变为"dcba"。【C函数】

阅读以下说明和C函数,将应填入____处的语句或语句成分写在答题纸的对应栏内。
已知单链表L含有头节点,且节点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删节点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。例如,某单链表如图11-3所示。若令minK为20,maxK为50,则删除后的链表如图11-4所示。

链表节点类型定义如下:
【C函数】

阅读下列说明,回答问题1至问题3,将解答或相应的编号填入答题纸的对应栏内。【说明】某公司的质量管理体系中的配置管理程序文件中有如下规定:1.由变更控制委员会(CCB)制订项目的配置管理计划;2.由配置管理员(CMO)创建配置管理环境;3.由CCB审核变更计划;4.项目中配置基线的变更经过变更申请、变更评估、变更实施后便可发布;5.CCB组成人员不少于一人,主席由项目经理担任。公司的项目均严格按照程序文件的规定执行。在项目经理的一次例行检查中,发现项目软件产品的一个基线版本(版本号V1.3)的两个相关联的源代码文件仍有遗留错误,便向CMO提出变更申请。CMO批准后,项目经理指定上述源代码文件的开发人员甲、乙修改错误。甲修改第一个文件后将版本号定为V1.4,直接在项目组内发布。次日,乙修改第二个文件后将版本号定为V2.3,也在项目组内发布。
阅读以下说明,回答【问题1】~【问题4】,将解答填入答题纸的对应栏内。
阅读以下说明,回答问题1~3,将答案填入对应的解答栏内。
阅读以下说明,回答问题1-5,将答案填入答题纸对应的解答栏内。

阅读以下说明和C++代码,将应填入_____处的字句写在答题纸的对应栏内。
【说明】已知类LinkedList表示列表类,该类具有4个方法:addElement()、lastElement()、numberOfElement()以及removeLastElement()。4个方法的含义分别如下。voidaddElement(Obect):在列表尾部添加一个对象。ObjectlastElement():返回列表尾部对象。intnumberOfElement():返回列表中对象的个数。voidremoveLastElement():删除列表尾部的对象。现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式来实现。【C++代码1】
【C++代码2】

【问题】若类LinkedList新增加了一个公有的方法removeElement(intindex),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(intindex)?__(5)__(A.继承B.组合)

阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
说明:某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.41所示。
现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图10.42所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图10.41中的甜点菜单。类Menultem表示菜单中的菜式。

阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。
说明:某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.43所示。现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图10.44所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图10.43中的甜点菜单。类Menultem表示菜单中的菜式。

已知以下程序段的运行结果为“654321”,则下划线所在位置应填入的代码是() #define N 6 int a[N]={1,2,3,4,5,6},i,t; for(i=0;i
阅读以下说明和C++代码,将应填入_____处的字句写在答题纸的对应栏内。 【说明】已知类LinkedList表示列表类,该类具有4个方法:addElement()、lastElement()、numberOfElement()以及removeLastElement()。4个方法的含义分别如下。voidaddElement(Obect):在列表尾部添加一个对象。ObjectlastElement():返回列表尾部对象。intnumberOfElement():返回列表中对象的个数。voidremoveLastElement():删除列表尾部的对象。现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式来实现。【C++代码1】 【C++代码2】 【问题】若类LinkedList新增加了一个公有的方法removeElement(intindex),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(intindex)?__(5)__(A.继承B.组合)
阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。 说明:某饭店在不同的时段提供多种不同的餐饮,其菜单的结构图如图10.43所示 。现在采用组合(Composition)模式来构造该饭店的菜单,使得饭店可以方便地在其中添加新的餐饮形式,得到如图10.44所示的类图。其中MenuComponent为抽象类,定义了添加(add)新菜单和打印饭店所有菜单信息(print)的方法接口。类Menu表示饭店提供的每种餐饮形式的菜单,如煎饼屋菜单、咖啡屋菜单等。每种菜单中都可以添加子菜单,例如图10.43中的甜点菜单。类Menultem表示菜单中的菜式。 Java代码如下:
阅读以下说明和C函数,将应填入____处的语句或语句成分写在答题纸的对应栏内。 已知单链表L含有头节点,且节点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删节点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。例如,某单链表如图11-3所示。若令minK为20,maxK为50,则删除后的链表如图11-4所示。 链表节点类型定义如下: 【C函数】
阅读下列说明,针对项目质量管理,回答问题1至问题3。将解答填入答题纸的对应栏内。【说明】某信息技术有限公司中标了某大型餐饮连锁企业集团的信息系统项目,该项目包含单店管理、物流系统和集团ERP等若干子项目。由该信息技术有限公司的高级项目经理张工全面负责项目实施。张工认为此项目质量管理的关键在于系统地进行测试。张工制订了详细的测试计划用来管理项目的质量。在项目实施过程中,他通过定期发给客户测试报告来证明项目质量是有保证的。可是客户总觉得有什么地方不对劲,对项目的质量还是没有信心。一般地,项目的质量管理计划应该包括哪些内容?
阅读下列说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 说明:设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量Wij和价格Cij。设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。采用回溯法来求解该问题。首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{1,2,…,m},将解空间用树形结构表示。接着从根节点开始,以深度优先的方式搜索整个解空间。从根节点开始,根节点成为活节点,同时也成为当前的扩展节点。向纵深方向考虑第一个部件从第一个供应商处购买,得到一个新节点。判断当前的机器价格(C11)是否超过上限(cc),重量(W11)是否比当前已知的解(最小重量)大,若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,根节点不再是扩展节点。继续向纵深方向考虑第二个部件从第一个供应商处购买,得到一个新节点。同样判断当前的机器价格(C11+C21)是否超过上限(cc),重量(W11+W21)是否比当前已知的解(最小重量)大。若是,应回溯至最近的一个活节点;若否,则该新节点成为活节点,同时也成为当前的扩展节点,原来的节点不再是扩展节点。以这种方式递归地在解空间中搜索,直到找到所要求的解或者解空间中已无活节点为止。 C代码:下面是该算法的C语言实现。 (1)变量说明n:机器的部件数。m:供应商数。cc:价格上限。w[][]:二维数组,w[i][j]表示第j个供应商供应的第i个部件的重量。c[][]:二维数组,c[i][j]表示第j个供应商供应的第i个部件的价格。bestW:满足价格上限约束条件的最小机器重量。bestC://最小重量机器的价格。bestX[]:最优解,一维数组,bestX[i]表示第i个部件来自哪个供应商。cw:搜索过程中机器的重量。cp:搜索过程中机器的价格。x[]:搜索过程中产生的解,x[i]表示第i个部件来自哪个供应商。i:当前考虑的部件,从0到n-1。j:循环变量 (2)函数backtrack 代码如下:
广告位招租WX:84302438

免费的网站请分享给朋友吧