948715321 948715321
关注数: 38 粉丝数: 7 发帖数: 77 关注贴吧数: 0
浪潮公司来我们学校招实训生时的笔试题目,打印出来与大家分享 RT!阅读以下说明和c语言,将应填入__(n)__处的字句写入答题纸对应处    说明:假设需要将N个任务分配给N个工人同时去完成,每个人都能承担这N个任务,但费用不同;下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配一个不同的任务。    程序中,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; /*设置的初始值,大于可能的费用*/ int task[N],temp[N],worker[N]; 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++)    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++)    printf("task% is assigned to worker%d\n",i,temp[i]); } /*main*/
1 下一页