阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,但费用不同。下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配1个不同的任务。程序中,N个任务从0开始依次编号,N个工人也从0开始依次编号,主要的变量说明如下:c[i][j]:将任务i分配给工人j的费用;task[i]:值为0表示任务i未分配,值为j表示任务i分配给工人j;worker[k]:值为0表示工人k未分配任务,值为1表示工人k已

题目

阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,

但费用不同。下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配1个不同的任务。

程序中,N个任务从0开始依次编号,N个工人也从0开始依次编号,主要的变量说明如下:

c[i][j]:将任务i分配给工人j的费用;

task[i]:值为0表示任务i未分配,值为j表示任务i分配给工人j;

worker[k]:值为0表示工人k未分配任务,值为1表示工人k已分配任务;

mincost:最小总费用。

【C程序】

#include<stdio.h>

#define N 8 /*N表示任务数和工人数*/

int c[N][N];

unsigned int mincost=65535; /*设置min的初始值,大于可能的总费用*/

int task[N],temp[N],workerIN];

void Plan(int k,unsigned Int cost)

{ int i;

if ((1)&&cost<mincost){

mincost=cost;

for (i=0;i<N;i++) temp[i]:task[i];

}

else{

for(i=0;i<N;i++) /*分配任务k*/

if (worker[i]=0&&(2)){

worker[i]=1; task[k]=(3);

Plan((4),cost+c[k][i]);

(5); task[k]=0;

}/*if*/

}

}/*Plan*/

void main()

{int i,j;

for (i=0;i<N;i++) { /*设置每个任务由不同工人承担时的费用及全局数组的初值*/

worker[i]=0;task[i]=0; temp[i]=0;

for(j=0;j<N;j++)

scanf ("%d",&c[i][j]);

}

Plan (0,0); /*从任务0开始分配*/

printf("\n最小费用=%d\n",mincost);

for(i二0;i<N;i++)

pnntf("Task%d iB assigned toWorker%d\n",i,temp[i]);

}/*main*/


相似考题
参考答案和解析
正确答案:(1)k>=N或k==N或其等价形式 (2)cost+e[k][i]mincost或其等价形式 (3)i (4)k+1 (5)worker[i]=0或其等价形式
(1)k>=N,或k==N,或其等价形式 (2)cost+e[k][i]mincost,或其等价形式 (3)i (4)k+1 (5)worker[i]=0,或其等价形式 解析:首先为函数Plan()代码加上行号,以便说明。
  1:void Plan(ihtk,unsigned int cost)
  2:{int i;
  3: if( (1) &&costmincost){
  4:  mincost=cost;
  5:  for(i=0;iN;i++) temp[i]=task[i];
  6:  }
  7: else{
  8:  for(i=0;iN;i++)  /*分配任务k*/
  9:  if (worker[i]=0&& (2) ){
  10:  worker[i]=1; task[k]= (3) ;
  11:  Plan( (4) ,cost+c[k][i]);
  12: (5) ; task[k]=0;
  13:  }/*if*/
  14: }/*else*/
  15:}/*Plan*/
  由注释可知,在Plan(k,cost)中,以k表示任务编号、cost表示费用。根据题目中的说明,程序用回溯法计算总费用最小的一种工作分配方案,因此在得到每一个分配方案时需要和先前已经得到的分配方案中的最小费用进行比较。由于需要将N个任务分配给N个工人,以任务为序时,最后一个任务(第N-1个任务)分配之后便得到一种方案,因此第3行代码的空(1)处填入“k>=N或k==N”。
  显然,在分配任务k时,需要考查所有的工人(第8行代码),此时若工人i尚未接收任务(worker[i]==0),并且将任务k分配给工人i不会超出前面某个方案的费用,则可将任务k分配给他(task[k]=i,然后开始分配第k+1个任务。回溯时则需要将分配工人i的任务撤销,以便考查其他的分配方案。
更多“阅读以下说明和C程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 假设需要将N个任务分配给 ”相关问题
  • 第1题:

    图2-1是基于软交换的网络分层模型。请将选项应填入(n)处的字句写在答题纸对应的解答栏内。


    正确答案:
    (1)业务/应用层
    (2)控制层
    (3)接入层
    (4)媒体网关

  • 第2题:

    ()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]下面程序是一个带参数的主函数,其功能是显示在命令行中输入的文本文件内容。[C语言函数]#include"stdio.h"main(argc,argv) int argc; char *argv[]; { (1) ; if((fp=fopen(argv[1],”r’’))== (2) ) { printf(”file not open!\n”);exit(0);} while( (3) ) putchar( (4) ); (5); }


    正确答案:()
    (1)FILE *fp; (2)NULL  (3)!feof(fp)  (4)fgetc(fp)   (5)fclose(fp)
    从程序功能来看,程序中需要用到文件型指针变量中,而主函数体没有定义,所以(1)应该填写的是“FILE *fp;”。接下来的语句是标准的打开只读文本文件的语句,显示的是文件没打开,说明文件名不存在,也就是为“NULL”。接着的while循环语句中有两处空白。前一个空白是控制循环的条件,从程序功能来看,要将文本文件中的所有字符显示出来,这儿当然只能填写“不是文件尾则继续循环”,具体说,需要填写的是“!feof(fp)”。(4)出现在循环体中的语句中,该循环体的功能是从fp指向的文本文件中读取单个字符并显示在屏幕上,此处使用的是putchar函数,该函数的功能是将形参对应的字符显示在屏幕上,所以该处的空白就是要显示的字符,这个字符必须是从文本文件中读取的单个字符,完成这项工作的可以利用fgetc()函数,所以(4)填写的是“fgetc(fp)”。最后一句应当是关闭文件,所以(5)应填fclose(fp)。

  • 第3题:

    阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。

    【C++代码】 #include using namespace std; class invoice{ public: (1){ cout<<"This is the content of the invoice!"<

    答案:
    解析:
    (1) virtual void printInvoice() (2) ticket->printInvoice() (3) Decorator::printInvoice() (4) Decorator::printInvoice() (5) &a
    【解析】

    试题分析
    1.Invoice类下,义虛函数,按类图,函数名是printInvoice
    2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice
    3.这部分填写发票的抬头,看类图应该实现函数printInvoice ,Decorator装饰模式使用该方法
    4.这部分是发票的脚注,看类图应该实现函数printlnvoice,Decorator装饰模式使用该方法
    5.FootDecorator a(NULL) ;脚步的装饰参数是a,调用a参数,

  • 第4题:

    (a)智能网概念模型中分布功能平面模型如下图所示,请根据此图将应填入(n)处的 字句写在答题纸的对应栏内。


    正确答案:
    (1)SMF(或业务管理功能)
    (2)SCEF(或业务生成功能)
    (3)SDF(或业务数据功能)
    (4)SCF(或业务控制功能)
    (5)SSF(或业务交换功能)
    (6)CCF(或呼叫控制功能)

  • 第5题:

    图6-1是下一代网络的体系结构简图,请根据此简图将应填入(n)处的字句写在答题纸的对应栏内。


    正确答案:
    (1)业务平面
    (2)控制平面
    (3)传输平面
    (4)接入平面
    (5)SIP-TBICC
    (6)SIGTRAN
    (7)MGCP/H.248
    (8)H.323
    (9)SIP

  • 第6题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析: