批处理作业调度问题
来源:互联网 发布: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
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 批处理作业调度问题
- 【回溯法】批处理作业调度问题
- 批处理作业调度问题 回溯法
- 回溯之批处理作业调度问题
- 回溯法解决批处理作业调度问题
- 回溯法 批处理作业调度问题
- 批处理作业调度
- 批处理作业调度
- 批处理作业调度
- 批处理作业调度
- 算法 批处理作业调度
- 批处理作业调度
- 第五章【回溯法】批处理作业调度问题
- dwz中对jqGrid设置a标签
- PHP中的=> -> ::
- 自定义Android中EditText中的Hint文本的大小
- UNIX环境高级编程(第11章 线程)
- mysql 的 find_in_set函数使用方法
- 批处理作业调度问题
- Java线程(一):线程安全与不安全
- 将页面上的javascript错误获取到并打印到页面上的方法
- Wi-Fi Direct(Wi-Fi P2P)
- LeetCode 48 Anagrams
- ByteBuffer用法小结(对刚接触NIO的童鞋有用)
- UNIX环境高级编程(第12章 线程控制)
- Android_Intent意图详解
- 进度条