阅读下列说明和C代码,回答以下问题,将解答写在答题纸的对应栏内。 【说明】 设有n个货物要装入若干个容重为C的集装箱以便运输,这n个货物的体积分别为{s1,s2,…,sn),且有si≤C(1≤i≤n)。为节省运输成本,用尽可能少的集装箱来装

admin2013-07-09  11

问题 阅读下列说明和C代码,回答以下问题,将解答写在答题纸的对应栏内。
    【说明】
    设有n个货物要装入若干个容重为C的集装箱以便运输,这n个货物的体积分别为{s1,s2,…,sn),且有si≤C(1≤i≤n)。为节省运输成本,用尽可能少的集装箱来装运这n个货物。
    下面分别采用最先适宜策略和最优适宜策略来求解该问题。
    最先适宜策略(firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。
    最优适宜策略(bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容重最小的集装箱,使得该箱子装人货物后闲置空间最小。
    【C代码】
    下面是这两个算法的C语言核心代码。
    (1)变量说明
    n:货物数
    C:集装箱容量
    S:数组,长度为n,其中每个元素表示货物的体积,下标从0开始b:数组,长度为n,b表示第n+i个集装箱当前已经装入货物的体积,下标从0开始i,j:循环变量
    k:所需的集装箱数
    min:当前所用的各集装箱装入了第i个货物后的最小剩余容量
    m:当前所需的集装箱数
    temp:临时变量
    (2)函数firstfit
    int firstfit(){
    int i,j;
    k=0:
    for(i=0;i<n;i++){
    b=0;
    }
    for(i=0;i<n;i++){
       (1)   
    while(C-b[j]<s){
        J++:
    }
      (2)   
    k=k>(j+1)?k:(j+1);
    }
    return k;
}
    (3)函数bestfit
    int bestfit(){
    int i,j,min,m,temp;
    k=0;
    for(i=0;i<n;i++){
    bri]=0;
    }
    for(i=0;i<n;i++){
        min=C;
        m=k+1:
        for(J=0;j<k+1;J++){
            temp=C-b[j]-s
            if(temp>0&&temp<min){
           (3)  
                m=j;
            }
        }
          (4)   
        k=k>(j+1)?k:(j+1);
    }
    return k;
    }
根据说明和C代码,填充C代码中的(1)~(4)。

选项

答案(1)j=0 (2)b[j]=b[j]+s[i] (3)rain=temp (4)b[m]=b[m+s[i]

解析 本题描述的算法包括最先适宜算法和最优适宜算法。其中,最先适宜算法要求按顺序给货物找到一个能容纳它的集装箱,找到即可装箱。这里的关键在于找到第一个能容纳它的集装箱,从头到尾遍历各集装箱即可。firstfit函数用于实现最先适宜算法。定位到(1)处,其上面的for循环用于对所有n个货物进行遍历,分别找出满足条件C-b[j]>=s的集装箱。但条件C-b[j]<s中的变量j在(1)前并没有显式的赋值语句,且遍历各集装箱应从第一个开始,因此(1)应填入j=0。(2)处表示货物已放入集装箱的情况,应更新装入货物后的体积,因此(2)应填入b[j]=b[j]+s
    最优适宜算法不仅要找到能容纳货物的集装箱,而且还要求该集装箱的剩余容量最小。bestfit函数用于实现最优适宜算法。该函数的:for循环语句中的temp表示剩余的最小容量,若其小于min,则应更新其值。因此,(3)应填入min=tamp。和firstfit函数中(2)类似的思路,(4)应填入b[m]=b[m]+s
转载请注明原文地址:https://kaotiyun.com/show/tiDZ777K
0

相关试题推荐
最新回复(0)