流水线作业调度问题c语言,流水线作业调度问题

本文介绍了一种解决流水线作业调度问题的方法,通过比较M1和M2的工作时间,使用优先级排序算法找到最短加工顺序,使总耗时达到最小。通过实例和代码展示如何在两台机器M1和M2上高效安排n个作业的加工顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

感觉有些 , 还要思考的地方 , 留下了 ,以后看。。。。

Description

N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。

流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。

Input

输入包括若干测试用例,每个用例输入格式为:

第1行 一个整数代表任务数n,当为0时表示结束,或者输入到文件结束(EOF)

第2行至第n+1行每行2个整数,代表任务在M1,M2上所需要的时间

Output

输出一个整数,代表执行n个任务的最短时间

Sample Input

Original

Transformed

1

1 2

0

Sample Output

Original

Transformed

3

#include

#include

struct node

{

int m1,m2;

};

struct node time[2][20000];

int cmp1(const void *p1,const void *p2)

{

return ( (*(struct node *)p1).m1>(*(struct node *)p2).m1? 1:-1);

}

int cmp2(const void *p1,const void *p2)

{

return ( (*(struct node *)p1).m2>(*(struct node *)p2).m2? -1:1 );

}

int main()

{

int n,i,a,b,q,p,time1,time2;

while(scanf("%d",&n)!=EOF&&n)

{

q=p=0;

time1=time2=0;

for(i=1;i<=n;i++)

{

scanf("%d%d",&a,&b);

if(b>=a)

{

time[0][q].m1=a;

time[0][q++].m2=b;

}

else{

time[1][p].m1=a;

time[1][p++].m2=b;

}

}

qsort(time[0],q,sizeof(time[0][0]),cmp1);//m1 降序

qsort(time[1],p,sizeof(time[1][0]),cmp2);//m2 升序

for(i=0;i

{

time1+=time[0][i].m1;

if(time2

time2=time1;

time2+=time[0][i].m2;

}

for(i=0;i

{

time1+=time[1][i].m1;

if(time2

time2=time1;

time2+=time[1][i].m2;

}

printf("%d\n",time2);

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值