dp:流水作业调度问题
来源:互联网 发布:淘宝客服服务流程图 编辑:程序博客网 时间:2024/05/17 00:57
#include <iostream>using namespace std;struct Task{ //定义一个任务结构体,装的是任务号,在M1和M2上所需要的时间 int id; int time_M1; int time_M2;};void FlowShop(struct Task t[],int *x,int n,int &time)//参数分别是一个结构体数组,x返回任务的执行顺序的id,n为任务个数,time返回总时间,这里time为C++里面的引用类型{ struct Task N1[20],N2[20],temp;//N1,N2分别装time_M1[i]<time_M2[i]和a[i]>b[i]的,temp是用于冒泡排序交换的临时变量 int k1,k2;//k1总表示当前M1上执行的总时间 int ii,jj;//k1总表示当前M2上执行的总时间 ii=jj=0;//分别用于N1,N2两个集合下标的计数器 /*对满足time_M1[i]<time_M2[i]的任务装到N1中,满足time_M1[i]>time_M2[i]的任务装到N2中*/ for(int i=0;i<n;i++) if(t[i].time_M1<t[i].time_M2) N1[ii++]=t[i]; else N2[jj++]=t[i]; /*对N1中的任务按time_M1非递减排序*/ for(int i=0;i<ii-1;i++) for(int j=i+1;j<ii;j++) if(N1[i].time_M1>N1[j].time_M1) { temp=N1[i]; N1[i]=N1[j]; N1[j]=temp; } /*对N2中的任务按time_M2非递增排序*/ for(int i=0;i<jj-1;i++) for(int j=i+1;j<jj;j++) if(N2[i].time_M2<N2[j].time_M2) { temp=N2[i]; N2[i]=N2[j]; N2[j]=temp; } jj=0;//jj初始化为0,方便后面对x[i]进行赋值 for(int i=0;i<ii;i++)//把N1的任务挨个儿放进去 x[i]=N1[i].id; for(int i=ii;i<n;i++)//把N2的任务挨个儿放进去,jj在这里起计数器的作用 x[i]=N2[jj++].id; /*初始化k1,k2,time*/ k1=t[x[0]-1].time_M1;//因为x[]数组里面装的是id,不是下标,因此要减去1才能当做结构体数组t的下标,下同 k2=k1+t[x[0]-1].time_M2; time=k1+k2; for(int i=1;i<n;i++)/*从第二个任务到第n个任务,这里是数组所以下标为1时就代表第二个任务啦*/ { if(k1+t[x[i]-1].time_M1>k2)//如果第i个任务的time_M1加上已有的k1比下面的k2大,那么任务i在M2上面开始执行的时间应该是k1+t[x[i]-1].time_M1 { k1+=t[x[i]-1].time_M1; k2=t[x[i]-1].time_M2+k1; time=k2; } else//如果第i个任务的time_M1加上已有的k1比下面的k2小,那么任务i在M2上面开始执行的时间应该是k2+t[x[i]-1].time_M1 { k1+=t[x[i]-1].time_M1; k2+=t[x[i]-1].time_M2; time=k2; } }}int main(){ struct Task task[6]={{1,2,5}, {2,7,3}, {3,6,2}, {4,4,7}, {5,6,9}, {6,8,2} }; int x[6],time=0; FlowShop(task,x,6,time); for(int i=0;i<6;i++) cout<<x[i]<<" "; cout<<endl; cout<<"total time is:"<<time<<endl;}
阅读全文
0 0
- dp:流水作业调度问题
- 流水作业调度(dp)
- 流水作业调度问题(转)
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- Java实现流水作业调度问题
- 流水作业调度问题 Johnson 算法
- 流水作业调度
- 流水作业调度
- 双机流水作业调度问题的Johnson算法
- 加工生产调度(Johnson算法 双机流水作业调度问题)
- 算法java实现--动态规划--流水作业调度问题
- 算法设计之流水作业调度问题Johnson算法结论
- 最优流水作业调度
- 最优流水作业调度
- 完全图解VS2017安装过程并演示VS2017创建Linux项目和调试
- js禁止粘贴非数字内容
- 【MySQL+ Redis】传统MySQL+ Memcached架构遇到的问题
- LeetCode 673.Number of Longest Increasing Subsequence
- 二叉堆
- dp:流水作业调度问题
- Qt创建桌面和开始菜单快捷方式
- kxt:C# 正则001
- 【区间DP】POJ3280[Cheapest Palindrome]题解
- 001 如何使Dialog有最小最大化按钮?
- js实现数组去重4种方法总结
- Java(Android)注解学习摘记
- Linux重定向和管道
- Tomcat7.0.42源码研读之网络连接器Connector(三)