#include <stdio.h>
//参照课本程序
#define n 3
int M[n][2] = {
2, 1,
3, 1,
2, 3
}; // 各作业所需的处理时间
int x[n]; //当前作业调度
int bestX[n]; //当前最优作业调度
int f2[n]; // 机器2完成处理时间
int f1; //机器1完成处理时间
int f; //完成时间和
int bestF; //当前最优值
void traceback(int t) {
if (t == n) {
for (int i = 0; i < n; i++) {
bestX[i] = x[i];
}
bestF = f;
} else {
for (int i = t; i < n; i++) {
f1 += M[x[i]][0];
f2[t] = (f2[t-1]>f1?f2[t-1]:f1) + M[x[i]][1];
f+=f2[t];
if (f < bestF) {
int temp = x[t];
x[t] = x[i];
x[i] = temp;
traceback(t+1);
temp = x[t];
x[t] = x[i];
x[i] = temp;
}
f1 -= M[x[i]][0];
f -= f2[t];
}
}
}
int main() {
f1 = 0, f = 0, bestF = 10000;
for (int i = 0; i < n; i++) {
f2[i] = 0;
x[i] = i;
}
traceback(0);
for (int i = 0; i < n; i++) {
printf(" %d ", bestX[i] + 1);
}
printf("\n %d", bestF);
return 0;
}
批处理作业问题
最新推荐文章于 2024-09-11 21:52:35 发布