//流水作业调度
const int maxn=5;
int a[]={2,4,3,6,1};
int b[]={5,2,3,1,7};
int c[maxn];
struct node
{
int key,id;
bool job;
};
int cmp(const node &a,const node &b)
{
return a.key<=b.key;
}
int flow_shop()
{
int j=0,k=maxn-1,n=maxn;
node *d=new node[n];
for(int i=0;i<n;i++)
{
d[i].key=min(a[i],b[i]);
if(a[i]<=b[i]) d[i].job=true;
else d[i].job=false;
d[i].id=i;
}
sort(d,d+n,cmp);
for(int i=0;i<n;i++)
if(d[i].job)c[j++]=d[i].id;
else c[k--]=d[i].id;
j=a[c[0]];
k=j+b[c[0]];
for(int i=1;i<n;i++)
{
j+=a[c[i]];
if(j<k) k+=b[c[i]];
else k=j+b[c[i]];
}
return k;
}
int main()
{
int min_time=flow_shop();
cout<<"作业在M1上的运行时间为:";
for(int i=0;i<maxn;i++)cout<<a[i]<<' ';
cout<<endl;
cout<<"作业在M2上的运行时间为:";
for(int i=0;i<maxn;i++)cout<<b[i]<<' ';
cout<<endl;
cout<<"完成所有作业的最短时间为"<<min_time<<endl;
cout<<"作业的顺序为:";
for(int i=0;i<maxn;i++)cout<<a[i]<<' ';
cout<<endl;
return 0;
}
流水作业调度(动态规划)-算法设计与分析
最新推荐文章于 2020-02-06 01:28:15 发布