批处理作业调度问题

来源:互联网 发布:iphone移动数据设置 编辑:程序博客网 时间:2024/05/16 05:53
    给定n个作业的集合J={J1,J2,…,Jn}。每一个作业有两项任务分别在两台机器上完成。每个作业必须先由机器1处理,再由机器2处理。作业Ji需要机器j的处理时间为tji,i=1,2,…n,j=1,2。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。则所有作业在机器2上完成处理的时间和f=F21+F22+…+F2n称为该作业调度的完成时间和。
    批处理作业调度问题要求,对于给定的n个作业,制定最佳的作业调度方案,使其完成时间和最小。

参考代码如下:
#include <stdio.h>int f, f1,*f2,bestf;int *bestX,*x;int n;int **M;void backtrack(int t){int i,j,k;int temp;if(t>n){for(i=0;i<=n;i++)bestX[i]=x[i];bestf=f;}else{for(j=t;j<=n;j++){f1+=M[x[j]][0];f2[t]=(f2[t-1]>f1?f2[t-1]:f1)+M[x[j]][1];f+=f2[t];if(f<bestf){temp=x[t]; x[t]=x[j]; x[j]=temp;backtrack(t+1);temp=x[t]; x[t]=x[j]; x[j]=temp;}f1-=M[x[j]][0];f-=f2[t];}}}int main(){int i,j,k;printf("input the number of homework:");scanf("%d", &n);M=new int *[n+1];for(i=1;i<=n;i++)M[i]=new int [2];printf("input the time consumed:");for(i=1;i<=n;i++){for(j=0;j<2;j++)scanf("%d",&M[i][j]);}f1=0; f=0; bestf=1000;f2=new int[n+1];bestX=new int [n+1];x=new int[n+1];for(i=0;i<=n;i++){f2[i]=0;x[i]=i;}backtrack(1);for(i=1;i<=n;i++)printf("%d ",bestX[i]);printf("\n%d ",bestf);return 0;}




0 0