参考答案:
(1)bestX[j] = x[j]
(2)j < m
(3)x[i] = j
(4)cw < bestW
(5)cp = cp - c[i][j]
详细解析:
本题考查回溯法的应用。
在题目的描述中告诉了我们回溯法的基本思想。其实回溯法主要有两个过程,一个是向前探索,只要在当前满足设定的判定条件时,才向前探索,而另外一个就是回溯,在两种情况下,需要回溯,其分别是当不满足设定条件时和求的一个解的时候。
下面我们来具体分析本试题。根据题目给出的注释,我们知道第(1)空所处的位置是得到问题的一个解时,我们该怎么办,根据题目描述,应该是将这个解记录下来,存放到bestX数组当中,而求得的解是保存在x数组当中的,因此这里需要循环将x数组中的元素值赋给bestX数组,因此第(1)空答案为bestX[j] = x[j]。
第(2)空是for循环中的循环判定条件,根据题目注释我们知道该循环的作用是确定第i个部件从第j个供应商购买,那么在确定第i个部件到底是从哪个供应商购买时,需要比较从各供应商购买的情况,因此循环的次数为供应商数,因此第(2)空答案是j < m。结合这个循环体当中的语句和我们对回溯法的理解,我们可以发现循环下面的语句是要考虑将第i个部件从供应商j当中购买,也就是j是当前解的一部分,因此需要将j记录到解当中来,所以第(3)空应该是x[i] = j。
第(4)空是if语句中的一个条件,根据题目注释,我们可以知道如果该if语句表达式的计算结果为真,需要进行深度搜索,扩展当前结点,那么如果要继续向前探索,就需要满足设定的条件,也就是当前总重量要小于bestW,而当前总价格要小于等于cc,因此第(4)空的答案应该填cw < bestW。
根据题目注释,第(5)空是在回溯下面的语句,根据回溯的原则我们可以知道,回溯时,要将当前考虑的结点的重量和价格从总重量和总价格中减去,因此第(5)的答案是cp = cp - c[i][j]。