原文地址: https://blog.csdn.net/qingdujun/article/details/84283789
问题描述:已知 n 个作业{1, 2, . . . , n}要在由两台机器 M 1 和 M 2 组成的流水线上完成加工。每个作业加工的顺序都是先在 M 1 上加工,然后在 M 2 上加工。M 1 和 M 2 加工作业 i 所需的时间分别为 ai和 bi ,1≤ i ≤ n。流水作业调度问题要求确定这 n 个作业的最优加工次序,使得从第一个作业在机器 M 1 上开始加工,到最后一个作业在机器 M 2 上加工完成所需的时间最少。
关于流水作业调度问题的以下 Johnson 算法:
(1) 令 AB = { i | ai < bi}, BA = { i | ai ≥ bi } ;
(2) 将 AB 中作业依 ai 的非减次序排列;将 BA 中作业依 bi 的非增次序排列;
(3) AB 中作业接 BA 中作业即构成满足 Johnson 法则的最优调度。
#include <stdio.h>
#include <algorithm>
using namespace std;
#define N 8
struct assignment
{
int a;
int b;
}asg[N] = {
{1,2},{2,4},{3,6},{4,1},{5,7},{6,4},{7,9},{8,3}};
bool cmp1(struct assignment x, struct assignment y){
if (x.a >= y.a){
return true;
}
return false;
}
bool cmp2(st